From 753de385952d41a2c8887093228066fb8b874592 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 9 Jul 2023 00:51:25 +0800 Subject: [PATCH] fixdevelop --- 6in4/Makefile | 45 + 6in4/files/6in4.sh | 149 + aquantia/Makefile | 41 + bcm27xx-eeprom/Makefile | 59 + ...1-rpi-eeprom-update-OpenWrt-defaults.patch | 45 + ...m-update-change-default-include-path.patch | 26 + ...date-chmod-silent-f-is-not-supported.patch | 33 + ...om-config-change-default-text-editor.patch | 22 + cryptodev-linux/Makefile | 58 + fullconenat/Makefile | 62 + .../001-fix-init-Repeat-definition.patch | 20 + .../patches/001-linux-6.1-support.patch | 26 + fullconenat/src/Makefile | 6 + golang/golang/Makefile | 3 +- https-dns-proxy/Makefile | 24 +- https-dns-proxy/files/README.md | 0 https-dns-proxy/files/https-dns-proxy.config | 9 +- .../files/https-dns-proxy.defaults | 3 - .../files/https-dns-proxy.hotplug.iface | 0 https-dns-proxy/files/https-dns-proxy.init | 411 +- ...-cflags.patch => 010-fix-cmakelists.patch} | 8 +- .../020-src-options.c-add-version.patch | 11 - https-dns-proxy/test.sh | 2 +- ipcalc/Makefile | 0 iproute2/Makefile | 9 +- iproute2/patches/100-configure.patch | 2 +- iproute2/patches/110-darwin_fixes.patch | 8 +- .../patches/115-add-config-xtlibdir.patch | 2 +- .../120-no_arpd_ifstat_rtacct_lnstat.patch | 0 .../130-no_netem_tipc_dcb_man_vdpa.patch | 0 iproute2/patches/140-allow_pfifo_fast.patch | 2 +- .../patches/140-keep_libmnl_optional.patch | 2 +- .../patches/145-keep_libelf_optional.patch | 2 +- .../patches/150-keep_libcap_optional.patch | 2 +- .../patches/155-keep_tirpc_optional.patch | 0 iproute2/patches/160-libnetlink-pic.patch | 0 iproute2/patches/170-ip_tiny.patch | 0 .../patches/175-reduce-dynamic-syms.patch | 8 +- iproute2/patches/180-drop_FAILED_POLICY.patch | 6 +- iproute2/patches/190-fix-nls-rpath-link.patch | 4 +- .../patches/195-build_variant_ip_tc.patch | 0 .../patches/200-drop_libbsd_dependency.patch | 2 +- .../patches/300-selinux-configurable.patch | 2 +- lcd4linux/Config.in | 490 + lcd4linux/Makefile | 306 + lcd4linux/files/lcd4linux.init | 15 + .../120-remove-as-needed-linker-option.patch | 11 + lcd4linux/patches/140-no_repnop_T6963.patch | 22 + lcd4linux/patches/150-addlibmpdclient.patch | 2624 +++ lcd4linux/patches/160-uinput_defs.patch | 24 + .../170-add-generic-spidev-driver.patch | 195 + .../patches/173-glcd2usb-bigendian-fix.patch | 20 + libell/Makefile | 0 libmbim/Makefile | 94 - libqmi/Config.in | 31 - libqmi/Makefile | 111 - luci-app-adguardhome/Makefile | 57 + .../luasrc/controller/AdGuardHome.lua | 130 + .../luasrc/model/cbi/AdGuardHome/base.lua | 304 + .../luasrc/model/cbi/AdGuardHome/log.lua | 16 + .../luasrc/model/cbi/AdGuardHome/manual.lua | 97 + .../view/AdGuardHome/AdGuardHome_check.htm | 78 + .../view/AdGuardHome/AdGuardHome_chpass.htm | 49 + .../view/AdGuardHome/AdGuardHome_status.htm | 27 + .../luasrc/view/AdGuardHome/log.htm | 111 + .../luasrc/view/AdGuardHome/yamleditor.htm | 39 + luci-app-adguardhome/po/zh-cn | 1 + .../po/zh_Hans/adguardhome.po | 408 + .../root/etc/config/AdGuardHome | 11 + .../root/etc/init.d/AdGuardHome | 642 + .../root/etc/uci-defaults/40_luci-AdGuardHome | 15 + .../AdGuardHome/AdGuardHome_template.yaml | 131 + .../root/usr/share/AdGuardHome/addhost.sh | 35 + .../root/usr/share/AdGuardHome/firewall.start | 8 + .../root/usr/share/AdGuardHome/getsyslog.sh | 20 + .../root/usr/share/AdGuardHome/gfw2adg.sh | 89 + .../root/usr/share/AdGuardHome/links.txt | 3 + .../root/usr/share/AdGuardHome/tailto.sh | 5 + .../root/usr/share/AdGuardHome/update_core.sh | 236 + .../root/usr/share/AdGuardHome/waitnet.sh | 35 + .../root/usr/share/AdGuardHome/watchconfig.sh | 13 + .../rpcd/acl.d/luci-app-adguardhome.json | 11 + .../codemirror/addon/fold/foldcode.js | 1 + .../codemirror/addon/fold/foldgutter.css | 1 + .../codemirror/addon/fold/foldgutter.js | 1 + .../codemirror/addon/fold/indent-fold.js | 1 + .../resources/codemirror/lib/codemirror.css | 1 + .../resources/codemirror/lib/codemirror.js | 1 + .../resources/codemirror/mode/yaml/yaml.js | 1 + .../resources/codemirror/theme/dracula.css | 1 + .../luci-static/resources/twin-bcrypt.min.js | 7 + luci-app-cpufreq/Makefile | 16 + .../luasrc/controller/cpufreq.lua | 11 + luci-app-cpufreq/luasrc/model/cbi/cpufreq.lua | 68 + luci-app-cpufreq/po/zh-cn/cpufreq.po | 32 + luci-app-cpufreq/root/etc/config/cpufreq | 3 + luci-app-cpufreq/root/etc/init.d/cpufreq | 27 + .../root/etc/uci-defaults/10-cpufreq | 104 + .../share/rpcd/acl.d/luci-app-cpufreq.json | 11 + luci-app-diskman/Makefile | 51 + .../luasrc/controller/diskman.lua | 155 + .../luasrc/model/cbi/diskman/btrfs.lua | 210 + .../luasrc/model/cbi/diskman/disks.lua | 327 + .../luasrc/model/cbi/diskman/partition.lua | 366 + luci-app-diskman/luasrc/model/diskman.lua | 738 + .../view/diskman/cbi/disabled_button.htm | 7 + .../luasrc/view/diskman/cbi/format_button.htm | 7 + .../luasrc/view/diskman/cbi/inlinebutton.htm | 7 + .../luasrc/view/diskman/cbi/xnullsection.htm | 37 + .../luasrc/view/diskman/cbi/xsimpleform.htm | 88 + .../luasrc/view/diskman/disk_info.htm | 108 + .../luasrc/view/diskman/partition_info.htm | 129 + .../luasrc/view/diskman/smart_detail.htm | 79 + luci-app-diskman/po/zh-cn/diskman.po | 239 + luci-app-diskman/po/zh_Hans | 1 + luci-app-dockerman/Makefile | 21 + luci-app-dockerman/depends.lst | 1 + .../resources/dockerman/containers.svg | 7 + .../resources/dockerman/file-icon.png | Bin 0 -> 1098 bytes .../resources/dockerman/file-manager.css | 91 + .../resources/dockerman/folder-icon.png | Bin 0 -> 1292 bytes .../resources/dockerman/images.svg | 9 + .../resources/dockerman/link-icon.png | Bin 0 -> 1622 bytes .../resources/dockerman/networks.svg | 12 + .../resources/dockerman/tar.min.js | 185 + .../resources/dockerman/volumes.svg | 6 + .../luasrc/controller/dockerman.lua | 614 + .../model/cbi/dockerman/configuration.lua | 152 + .../luasrc/model/cbi/dockerman/container.lua | 810 + .../luasrc/model/cbi/dockerman/containers.lua | 284 + .../luasrc/model/cbi/dockerman/images.lua | 284 + .../luasrc/model/cbi/dockerman/networks.lua | 159 + .../model/cbi/dockerman/newcontainer.lua | 923 + .../luasrc/model/cbi/dockerman/newnetwork.lua | 258 + .../luasrc/model/cbi/dockerman/overview.lua | 151 + .../luasrc/model/cbi/dockerman/volumes.lua | 142 + luci-app-dockerman/luasrc/model/docker.lua | 507 + .../luasrc/view/dockerman/apply_widget.htm | 147 + .../view/dockerman/cbi/inlinebutton.htm | 7 + .../luasrc/view/dockerman/cbi/inlinevalue.htm | 33 + .../view/dockerman/cbi/namedsection.htm | 9 + .../luasrc/view/dockerman/cbi/xfvalue.htm | 10 + .../luasrc/view/dockerman/container.htm | 28 + .../view/dockerman/container_console.htm | 6 + .../view/dockerman/container_file_manager.htm | 332 + .../luasrc/view/dockerman/container_stats.htm | 81 + .../dockerman/containers_running_stats.htm | 91 + .../luasrc/view/dockerman/images_import.htm | 104 + .../luasrc/view/dockerman/images_load.htm | 40 + .../luasrc/view/dockerman/logs.htm | 13 + .../view/dockerman/newcontainer_resolve.htm | 102 + .../luasrc/view/dockerman/overview.htm | 197 + .../luasrc/view/dockerman/volume_size.htm | 21 + luci-app-dockerman/po/templates/dockerman.pot | 1002 + luci-app-dockerman/po/zh-cn/dockerman.po | 1094 + luci-app-dockerman/po/zh_Hans | 1 + luci-app-dockerman/postinst | 14 + luci-app-dockerman/root/etc/init.d/dockerman | 131 + .../root/etc/uci-defaults/luci-app-dockerman | 36 + .../share/rpcd/acl.d/luci-app-dockerman.json | 11 + luci-app-dsvpn/Makefile | 0 .../resources/view/services/dsvpn.js | 0 luci-app-dsvpn/po/fr/dsvpn.po | 0 luci-app-dsvpn/po/fr/dsvpn.po~ | 0 luci-app-dsvpn/po/ru/dsvpn.po | 0 luci-app-dsvpn/po/templates/dsvpn.pot | 0 luci-app-dsvpn/po/zh_Hans/dsvpn.po | 0 luci-app-dsvpn/po/zh_Hans/dsvpn.po~ | 0 .../usr/share/luci/menu.d/luci-app-dsvpn.json | 0 .../usr/share/rpcd/acl.d/luci-app-dsvpn.json | 0 luci-app-firewall/Makefile | 0 .../luci-static/resources/tools/firewall.js | 0 .../resources/view/firewall/custom.js | 0 .../resources/view/firewall/forwards.js | 0 .../resources/view/firewall/rules.js | 0 .../resources/view/firewall/snats.js | 0 .../resources/view/firewall/zones.js | 10 +- luci-app-firewall/po/bg/firewall.po | 0 luci-app-firewall/po/ca/firewall.po | 0 luci-app-firewall/po/cs/firewall.po | 0 luci-app-firewall/po/de/firewall.po | 0 luci-app-firewall/po/el/firewall.po | 0 luci-app-firewall/po/en/firewall.po | 0 luci-app-firewall/po/es/firewall.po | 0 luci-app-firewall/po/fr/firewall.po | 0 luci-app-firewall/po/he/firewall.po | 0 luci-app-firewall/po/hi/firewall.po | 0 luci-app-firewall/po/hu/firewall.po | 0 luci-app-firewall/po/it/firewall.po | 0 luci-app-firewall/po/ja/firewall.po | 0 luci-app-firewall/po/ko/firewall.po | 0 luci-app-firewall/po/mr/firewall.po | 0 luci-app-firewall/po/ms/firewall.po | 0 luci-app-firewall/po/nb_NO/firewall.po | 0 luci-app-firewall/po/pl/firewall.po | 0 luci-app-firewall/po/pt/firewall.po | 0 luci-app-firewall/po/pt_BR/firewall.po | 0 luci-app-firewall/po/ro/firewall.po | 0 luci-app-firewall/po/ru/firewall.po | 0 luci-app-firewall/po/sk/firewall.po | 0 luci-app-firewall/po/sv/firewall.po | 0 luci-app-firewall/po/templates/firewall.pot | 0 luci-app-firewall/po/tr/firewall.po | 0 luci-app-firewall/po/uk/firewall.po | 0 luci-app-firewall/po/vi/firewall.po | 0 luci-app-firewall/po/zh_Hans/firewall.po | 0 luci-app-firewall/po/zh_Hant/firewall.po | 0 .../share/luci/menu.d/luci-app-firewall.json | 0 .../share/rpcd/acl.d/luci-app-firewall.json | 0 luci-app-glorytun-tcp/Makefile | 0 .../resources/view/services/glorytun-tcp.js | 0 luci-app-glorytun-tcp/po/fr/glorytun-tcp.po | 0 luci-app-glorytun-tcp/po/fr/glorytun-tcp.po~ | 0 luci-app-glorytun-tcp/po/ru/glorytun-tcp.po | 0 .../po/templates/glorytun-tcp.pot | 0 .../po/zh_Hans/glorytun-tcp.po | 0 .../po/zh_Hans/glorytun-tcp.po~ | 0 .../root/etc/hotplug.d/iface/30-glorytun | 0 .../root/etc/uci-defaults/1200-luci-glorytun | 0 .../luci/menu.d/luci-app-glorytun-tcp.json | 0 .../rpcd/acl.d/luci-app-glorytun-tcp.json | 0 luci-app-glorytun-udp/Makefile | 0 .../resources/view/services/glorytun-udp.js | 0 luci-app-glorytun-udp/po/fr/glorytun-udp.po | 0 luci-app-glorytun-udp/po/fr/glorytun-udp.po~ | 0 luci-app-glorytun-udp/po/ru/glorytun-udp.po | 0 .../po/templates/glorytun-udp.pot | 0 .../po/zh_Hans/glorytun-udp.po | 0 .../po/zh_Hans/glorytun-udp.po~ | 0 .../root/etc/config/glorytun-udp | 0 .../root/etc/hotplug.d/iface/30-glorytun-udp | 0 .../etc/uci-defaults/1201-luci-glorytun-udp | 0 .../luci/menu.d/luci-app-glorytun-udp.json | 0 .../rpcd/acl.d/luci-app-glorytun-udp.json | 0 luci-app-haproxy-tcp/LICENSE | 0 luci-app-haproxy-tcp/Makefile | 0 luci-app-haproxy-tcp/README.md | 0 .../luasrc/controller/haproxy-tcp.lua | 0 .../luasrc/model/cbi/haproxy-tcp.lua | 0 luci-app-haproxy-tcp/po/fr/haproxy-tcp.po | 0 .../po/templates/haproxy-tcp.pot | 0 luci-app-haproxy-tcp/po/zh-cn/haproxy-tcp.po | 0 .../root/etc/config/haproxy-tcp | 0 .../root/etc/uci-defaults/41_luci-haproxy-tcp | 0 luci-app-https-dns-proxy/Makefile | 0 .../luasrc/controller/https-dns-proxy.lua | 0 .../ch.digitale-gesellschaft.dns.lua | 0 .../providers.disabled/cn.rubyfish.dns.lua | 0 .../providers.disabled/sb.dns.lua | 0 .../providers/com.adguard.dns-family.lua | 0 .../providers/com.adguard.dns.lua | 0 .../providers/com.cloudflare-dns-family.lua | 0 .../providers/com.cloudflare-dns-malware.lua | 0 .../providers/com.cloudflare-dns.lua | 0 .../https-dns-proxy/providers/cz.nic.odvr.lua | 0 .../https-dns-proxy/providers/google.dns.lua | 0 .../providers/gr.libredns.doh-ads.lua | 0 .../providers/gr.libredns.doh.lua | 0 .../providers/net.quad9.dns.lua | 0 .../providers/net.quad9.dns10.lua | 0 .../providers/net.quad9.dns11.lua | 0 .../providers/net.quad9.dns9.lua | 0 .../providers/org.cleanbrowsing.doh-adult.lua | 0 .../org.cleanbrowsing.doh-family.lua | 0 .../org.cleanbrowsing.doh-security.lua | 0 .../luasrc/model/cbi/https-dns-proxy.lua | 0 .../luasrc/view/https-dns-proxy/buttons.htm | 0 .../luasrc/view/https-dns-proxy/css.htm | 0 .../luasrc/view/https-dns-proxy/js.htm | 0 .../view/https-dns-proxy/status-textarea.htm | 0 .../luasrc/view/https-dns-proxy/status.htm | 0 .../po/bg/https-dns-proxy.po | 0 .../po/ca/https-dns-proxy.po | 0 .../po/cs/https-dns-proxy.po | 0 .../po/de/https-dns-proxy.po | 0 .../po/el/https-dns-proxy.po | 0 .../po/en/https-dns-proxy.po | 0 .../po/es/https-dns-proxy.po | 0 .../po/fr/https-dns-proxy.po | 0 .../po/he/https-dns-proxy.po | 0 .../po/hi/https-dns-proxy.po | 0 .../po/hu/https-dns-proxy.po | 0 .../po/it/https-dns-proxy.po | 0 .../po/ja/https-dns-proxy.po | 0 .../po/ko/https-dns-proxy.po | 0 .../po/mr/https-dns-proxy.po | 0 .../po/ms/https-dns-proxy.po | 0 .../po/nb_NO/https-dns-proxy.po | 0 .../po/pl/https-dns-proxy.po | 0 .../po/pt/https-dns-proxy.po | 0 .../po/pt_BR/https-dns-proxy.po | 0 .../po/ro/https-dns-proxy.po | 0 .../po/ru/https-dns-proxy.po | 0 .../po/sk/https-dns-proxy.po | 0 .../po/sv/https-dns-proxy.po | 0 .../po/templates/https-dns-proxy.pot | 0 .../po/tr/https-dns-proxy.po | 0 .../po/uk/https-dns-proxy.po | 0 .../po/vi/https-dns-proxy.po | 0 .../po/zh_Hans/https-dns-proxy.po | 0 .../po/zh_Hant/https-dns-proxy.po | 0 .../etc/uci-defaults/40_luci-https-dns-proxy | 0 .../luci/menu.d/luci-app-https-dns-proxy.json | 0 .../rpcd/acl.d/luci-app-https-dns-proxy.json | 0 luci-app-iperf/Makefile | 0 luci-app-iperf/luasrc/controller/iperf.lua | 0 luci-app-iperf/luasrc/view/iperf/test.htm | 0 luci-app-iperf/po/de/iperf.po | 0 luci-app-iperf/po/de/iperf.po~ | 0 luci-app-iperf/po/fr/iperf.po | 0 luci-app-iperf/po/fr/iperf.po~ | 0 luci-app-iperf/po/it/iperf.po | 0 luci-app-iperf/po/it/iperf.po~ | 0 luci-app-iperf/po/oc/iperf.po | 0 luci-app-iperf/po/oc/iperf.po~ | 0 luci-app-iperf/po/ru/iperf.po | 0 luci-app-iperf/po/templates/iperf.pot | 0 luci-app-iperf/po/zh_Hans/iperf.po | 0 luci-app-iperf/po/zh_Hans/iperf.po~ | 0 luci-app-iperf/root/etc/config/iperf | 0 .../usr/share/luci/menu.d/luci-app-iperf.json | 0 .../usr/share/rpcd/acl.d/luci-app-iperf.json | 0 luci-app-macvlan/po/zh_Hans/macvlan.po | 0 luci-app-mail/Makefile | 0 luci-app-mail/luasrc/controller/mail.lua | 0 luci-app-mail/luasrc/model/cbi/mail.lua | 0 luci-app-mail/po/de/mail.po | 0 luci-app-mail/po/de/mail.po~ | 0 luci-app-mail/po/fr/mail.po | 0 luci-app-mail/po/fr/mail.po~ | 0 luci-app-mail/po/it/mail.po | 0 luci-app-mail/po/it/mail.po~ | 0 luci-app-mail/po/oc/mail.po | 0 luci-app-mail/po/oc/mail.po~ | 0 luci-app-mail/po/ru/mail.po | 0 luci-app-mail/po/templates/mail.pot | 0 luci-app-mail/po/zh_Hans/mail.po | 0 luci-app-mail/po/zh_Hans/mail.po~ | 0 luci-app-mail/root/etc/config/mail | 0 .../usr/share/luci/menu.d/luci-app-mail.json | 0 .../usr/share/rpcd/acl.d/luci-app-mail.json | 0 luci-app-mlvpn/Makefile | 0 .../resources/view/services/mlvpn.js | 0 luci-app-mlvpn/po/fr/mlvpn.po | 0 luci-app-mlvpn/po/fr/mlvpn.po~ | 0 luci-app-mlvpn/po/ru/mlvpn.po | 0 luci-app-mlvpn/po/templates/mlvpn.pot | 0 luci-app-mlvpn/po/zh_Hans/mlvpn.po | 0 luci-app-mlvpn/po/zh_Hans/mlvpn.po~ | 0 .../usr/share/luci/menu.d/luci-app-mlvpn.json | 0 .../usr/share/rpcd/acl.d/luci-app-mlvpn.json | 0 luci-app-mptcp/Makefile | 0 .../luci-static/resources/seedrandom.js | 0 luci-app-mptcp/luasrc/controller/mptcp.lua | 0 luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 0 .../luasrc/view/mptcp/mptcp_check.htm | 0 .../luasrc/view/mptcp/mptcp_connections.htm | 0 .../luasrc/view/mptcp/mptcp_fullmesh.htm | 0 .../luasrc/view/mptcp/mptcp_monitor.htm | 0 .../luasrc/view/mptcp/multipath.htm | 0 luci-app-mptcp/po/de/mptcp.po | 0 luci-app-mptcp/po/de/mptcp.po~ | 0 luci-app-mptcp/po/fr/mptcp.po | 0 luci-app-mptcp/po/it/mptcp.po | 0 luci-app-mptcp/po/it/mptcp.po~ | 0 luci-app-mptcp/po/oc/mptcp.po | 0 luci-app-mptcp/po/oc/mptcp.po~ | 0 luci-app-mptcp/po/ru/mptcp.po | 0 luci-app-mptcp/po/templates/mptcp.pot | 0 luci-app-mptcp/po/zh_Hans/mptcp.po | 0 .../usr/share/luci/menu.d/luci-app-mptcp.json | 0 .../usr/share/rpcd/acl.d/luci-app-mptcp.json | 0 luci-app-nginx-ha/LICENSE | 0 luci-app-nginx-ha/Makefile | 0 .../luasrc/controller/nginx-ha.lua | 0 .../luasrc/model/cbi/nginx-ha.lua | 0 luci-app-nginx-ha/po/fr/nginx-ha.po | 0 luci-app-nginx-ha/po/templates/nginx-ha.pot | 0 luci-app-nginx-ha/root/etc/config/nginx-ha | 0 .../root/etc/uci-defaults/42_luci-nginx-ha | 0 .../share/luci/menu.d/luci-app-nginx-ha.json | 0 .../share/rpcd/acl.d/luci-app-nginx-ha.json | 0 luci-app-omr-bypass/Makefile | 6 +- .../resources/view/services/omr-bypass.js | 0 luci-app-omr-bypass/po/de/omr-bypass.po | 0 luci-app-omr-bypass/po/de/omr-bypass.po~ | 0 luci-app-omr-bypass/po/fr/omr-bypass.po | 0 luci-app-omr-bypass/po/it/omr-bypass.po | 0 luci-app-omr-bypass/po/it/omr-bypass.po~ | 0 luci-app-omr-bypass/po/oc/omr-bypass.po | 0 luci-app-omr-bypass/po/oc/omr-bypass.po~ | 0 luci-app-omr-bypass/po/ru/omr-bypass.po | 0 .../po/templates/omr-bypass.pot | 0 luci-app-omr-bypass/po/zh_Hans/omr-bypass.po | 0 .../root/etc/config/omr-bypass | 0 .../root/etc/firewall.omr-bypass | 0 .../root/etc/init.d/omr-bypass | 3 +- .../root/etc/uci-defaults/41_omr-bypass | 1 + .../luci/menu.d/luci-app-omr-bypass.json | 0 .../usr/share/omr-bypass/omr-bypass-proto.lst | 0 .../root/usr/share/omr-bypass/omr-bypass.db | Bin 2342912 -> 2338816 bytes .../share/rpcd/acl.d/luci-app-omr-bypass.json | 0 luci-app-omr-dscp/Makefile | 0 .../luasrc/controller/omr-dscp.lua | 0 .../luasrc/model/cbi/dscp-domains.lua | 0 luci-app-omr-dscp/luasrc/model/cbi/dscp.lua | 0 luci-app-omr-dscp/po/de/omr-dscp.po | 0 luci-app-omr-dscp/po/de/omr-dscp.po~ | 0 luci-app-omr-dscp/po/fr/omr-dscp.po | 0 luci-app-omr-dscp/po/fr/omr-dscp.po~ | 0 luci-app-omr-dscp/po/it/omr-dscp.po | 0 luci-app-omr-dscp/po/it/omr-dscp.po~ | 0 luci-app-omr-dscp/po/oc/omr-dscp.po | 0 luci-app-omr-dscp/po/oc/omr-dscp.po~ | 0 luci-app-omr-dscp/po/templates/omr-dscp.pot | 0 luci-app-omr-dscp/po/zh_Hans/omr-dscp.po | 0 luci-app-omr-dscp/po/zh_Hans/omr-dscp.po~ | 0 luci-app-omr-dscp/root/etc/config/dscp | 0 .../share/luci/menu.d/luci-app-omr-dscp.json | 0 .../share/rpcd/acl.d/luci-app-omr-dscp.json | 0 luci-app-omr-quota/Makefile | 0 .../luasrc/controller/quota.lua | 0 .../luasrc/model/cbi/quota/quota.lua | 0 .../luasrc/view/omr-quota/cbi-select-add.htm | 0 luci-app-omr-quota/po/de/omr-quota.po | 0 luci-app-omr-quota/po/de/omr-quota.po~ | 0 luci-app-omr-quota/po/fr/omr-quota.po | 0 luci-app-omr-quota/po/fr/omr-quota.po~ | 0 luci-app-omr-quota/po/it/omr-quota.po | 0 luci-app-omr-quota/po/it/omr-quota.po~ | 0 luci-app-omr-quota/po/oc/omr-quota.po | 0 luci-app-omr-quota/po/oc/omr-quota.po~ | 0 luci-app-omr-quota/po/ru/omr-quota.po | 0 luci-app-omr-quota/po/templates/omr-quota.pot | 0 luci-app-omr-quota/po/zh_Hans/omr-quota.po | 0 luci-app-omr-quota/po/zh_Hans/omr-quota.po~ | 0 .../share/luci/menu.d/luci-app-omr-quota.json | 0 .../share/rpcd/acl.d/luci-app-omr-quota.json | 0 luci-app-omr-tracker/Makefile | 0 .../luasrc/controller/omr-tracker.lua | 0 .../luasrc/model/cbi/omr-tracker.lua | 0 .../view/omr-tracker/cbi-select-add.htm | 0 luci-app-omr-tracker/po/de/omr-tracker.po | 0 luci-app-omr-tracker/po/de/omr-tracker.po~ | 0 luci-app-omr-tracker/po/fr/omr-tracker.po | 0 luci-app-omr-tracker/po/fr/omr-tracker.po~ | 0 luci-app-omr-tracker/po/it/omr-tracker.po | 0 luci-app-omr-tracker/po/it/omr-tracker.po~ | 0 luci-app-omr-tracker/po/oc/omr-tracker.po | 0 luci-app-omr-tracker/po/oc/omr-tracker.po~ | 0 .../po/templates/omr-tracker.pot | 0 .../po/zh_Hans/omr-tracker.po | 0 .../root/etc/uci-defaults/42_luci-omr-tracker | 0 .../luci/menu.d/luci-app-omr-tracker.json | 0 .../rpcd/acl.d/luci-app-omr-tracker.json | 0 .../openmptcprouter/css/wanstatus.css | 0 .../openmptcprouter/images/status-doing.png | Bin .../openmptcprouter/images/status-done.png | Bin .../openmptcprouter/images/status-error.png | Bin .../openmptcprouter/images/status-todo.png | Bin .../openmptcprouter/images/status-warn.png | Bin .../openmptcprouter/images/statusError.png | Bin .../openmptcprouter/images/statusOK.png | Bin .../openmptcprouter/images/statusWarning.png | Bin .../htdocs/luci-static/resources/spinner.gif | Bin .../luasrc/controller/openmptcprouter.lua | 0 .../luasrc/view/openmptcprouter/backup.htm | 0 .../luasrc/view/openmptcprouter/debug.htm | 0 .../luasrc/view/openmptcprouter/settings.htm | 0 .../luasrc/view/openmptcprouter/wanstatus.htm | 0 .../luasrc/view/openmptcprouter/wizard.htm | 1 + .../po/de/openmptcprouter.po | 0 .../po/de/openmptcprouter.po~ | 0 .../po/fr/openmptcprouter.po | 0 .../po/fr/openmptcprouter.po~ | 0 .../po/it/openmptcprouter.po | 0 .../po/it/openmptcprouter.po~ | 0 .../po/oc/openmptcprouter.po | 0 .../po/oc/openmptcprouter.po~ | 0 .../po/templates/openmptcprouter.pot | 0 .../po/zh_Hans/openmptcprouter.po | 0 .../po/zh_Hans/openmptcprouter.po~ | 0 .../root/bin/omr-modemmanager | 12 +- .../root/etc/config/openmptcprouter | 0 .../root/usr/libexec/rpcd/openmptcprouter | 10 +- .../luci/menu.d/luci-app-openmptcprouter.json | 0 .../rpcd/acl.d/luci-app-openmptcprouter.json | 0 luci-app-packet-capture/Makefile | 14 + .../resources/view/packet_capture/tcpdump.js | 287 + .../po/fr/packet-capture.po | 99 + .../po/templates/packet-capture.pot | 90 + .../po/zh_Hans/packet-capture.po | 99 + .../root/etc/config/packet_capture | 1 + .../root/usr/libexec/packet_capture | 64 + .../root/usr/libexec/packet_capture_start | 69 + .../root/usr/libexec/packet_capture_stop | 9 + .../luci/menu.d/luci-app-packet-capture.json | 18 + .../rpcd/acl.d/luci-app-packet-capture.json | 25 + luci-app-shadowsocks-libev/Makefile | 0 .../resources/shadowsocks-libev.js | 0 .../view/shadowsocks-libev/instances.js | 0 .../resources/view/shadowsocks-libev/rules.js | 0 .../view/shadowsocks-libev/servers.js | 0 .../luasrc/controller/shadowsocks-libev.lua | 0 .../po/bg/shadowsocks-libev.po | 0 .../po/ca/shadowsocks-libev.po | 0 .../po/cs/shadowsocks-libev.po | 0 .../po/de/shadowsocks-libev.po | 0 .../po/el/shadowsocks-libev.po | 0 .../po/en/shadowsocks-libev.po | 0 .../po/es/shadowsocks-libev.po | 0 .../po/fr/shadowsocks-libev.po | 0 .../po/he/shadowsocks-libev.po | 0 .../po/hi/shadowsocks-libev.po | 0 .../po/hu/shadowsocks-libev.po | 0 .../po/it/shadowsocks-libev.po | 0 .../po/ja/shadowsocks-libev.po | 0 .../po/ko/shadowsocks-libev.po | 0 .../po/ms/shadowsocks-libev.po | 0 .../po/nb_NO/shadowsocks-libev.po | 0 .../po/pl/shadowsocks-libev.po | 0 .../po/pt/shadowsocks-libev.po | 0 .../po/pt_BR/shadowsocks-libev.po | 0 .../po/ro/shadowsocks-libev.po | 0 .../po/ru/shadowsocks-libev.po | 0 .../po/sk/shadowsocks-libev.po | 0 .../po/sv/shadowsocks-libev.po | 0 .../po/templates/shadowsocks-libev.pot | 0 .../po/tr/shadowsocks-libev.po | 0 .../po/uk/shadowsocks-libev.po | 0 .../po/vi/shadowsocks-libev.po | 0 .../po/zh-cn/shadowsocks-libev.po | 0 .../po/zh-tw/shadowsocks-libev.po | 0 .../uci-defaults/40_luci-shadowsocks-libev | 0 .../menu.d/luci-app-shadowsocks-libev.json | 0 .../acl.d/luci-app-shadowsocks-libev.json | 0 luci-app-shutdown/Makefile | 0 .../resources/view/system/shutdown.js | 0 luci-app-shutdown/po/de/shutdown.po | 0 luci-app-shutdown/po/fr/shutdown.po | 0 luci-app-shutdown/po/it/shutdown.po | 0 luci-app-shutdown/po/oc/shutdown.po | 0 luci-app-shutdown/po/pl/shutdown.po | 0 luci-app-shutdown/po/ru/shutdown.po | 0 luci-app-shutdown/po/templates/shutdown.pot | 0 luci-app-shutdown/po/zh_Hans/shutdown.po | 0 .../share/luci/menu.d/luci-app-shutdown.json | 0 .../share/rpcd/acl.d/luci-app-shutdown.json | 0 luci-app-snmpd/Makefile | 18 +- .../luci-static/resources/view/snmpd/snmpd.js | 64 - luci-app-snmpd/luasrc/controller/snmpd.lua | 0 luci-app-snmpd/luasrc/model/cbi/snmpd.lua | 0 luci-app-snmpd/luasrc/view/snmpd.htm | 0 luci-app-snmpd/po/de/snmpd.po | 0 luci-app-snmpd/po/fr/snmpd.po | 0 luci-app-snmpd/po/it/snmpd.po | 0 luci-app-snmpd/po/oc/snmpd.po | 0 luci-app-snmpd/po/templates/snmpd.pot | 176 +- luci-app-snmpd/po/zh_Hans/snmpd.po | 0 luci-app-snmpd/root/etc/config/snmpd | 0 .../usr/share/luci/menu.d/luci-app-snmpd.json | 12 +- .../usr/share/rpcd/acl.d/luci-app-snmpd.json | 18 +- luci-app-sqm-autorate/Makefile | 16 + .../luci-static/resources/view/network/sqm.js | 298 + luci-app-sqm-autorate/po/ar/sqm.po | 211 + luci-app-sqm-autorate/po/bg/sqm.po | 219 + luci-app-sqm-autorate/po/bn_BD/sqm.po | 208 + luci-app-sqm-autorate/po/ca/sqm.po | 202 + luci-app-sqm-autorate/po/cs/sqm.po | 210 + luci-app-sqm-autorate/po/da/sqm.po | 248 + luci-app-sqm-autorate/po/de/sqm.po | 255 + luci-app-sqm-autorate/po/el/sqm.po | 208 + luci-app-sqm-autorate/po/en/sqm.po | 202 + luci-app-sqm-autorate/po/es/sqm.po | 250 + luci-app-sqm-autorate/po/fi/sqm.po | 216 + luci-app-sqm-autorate/po/fr/sqm.po | 247 + luci-app-sqm-autorate/po/he/sqm.po | 202 + luci-app-sqm-autorate/po/hi/sqm.po | 202 + luci-app-sqm-autorate/po/hu/sqm.po | 208 + luci-app-sqm-autorate/po/it/sqm.po | 208 + luci-app-sqm-autorate/po/ja/sqm.po | 208 + luci-app-sqm-autorate/po/ko/sqm.po | 208 + luci-app-sqm-autorate/po/mr/sqm.po | 202 + luci-app-sqm-autorate/po/ms/sqm.po | 202 + luci-app-sqm-autorate/po/nb_NO/sqm.po | 202 + luci-app-sqm-autorate/po/pl/sqm.po | 253 + luci-app-sqm-autorate/po/pt/sqm.po | 256 + luci-app-sqm-autorate/po/pt_BR/sqm.po | 258 + luci-app-sqm-autorate/po/ro/sqm.po | 257 + luci-app-sqm-autorate/po/ru/sqm.po | 222 + luci-app-sqm-autorate/po/sk/sqm.po | 208 + luci-app-sqm-autorate/po/sv/sqm.po | 216 + luci-app-sqm-autorate/po/templates/sqm.pot | 265 + luci-app-sqm-autorate/po/tr/sqm.po | 244 + luci-app-sqm-autorate/po/uk/sqm.po | 209 + luci-app-sqm-autorate/po/vi/sqm.po | 208 + luci-app-sqm-autorate/po/zh_Hans/sqm.po | 217 + luci-app-sqm-autorate/po/zh_Hant/sqm.po | 218 + .../root/etc/init.d/sqm-autorate | 62 + .../root/etc/uci-defaults/50-luci-sqm | 17 + luci-app-sqm-autorate/root/root/cake-autorate | 1 + .../usr/share/luci/menu.d/luci-app-sqm.json | 13 + .../usr/share/rpcd/acl.d/luci-app-sqm.json | 23 + .../usr/share/sqm-autorate/cake-autorate.sh | 2270 ++ .../root/usr/share/sqm-autorate/config.sh | 131 + .../usr/share/sqm-autorate/config_template.sh | 214 + .../root/usr/share/sqm-autorate/defaults.sh | 209 + .../root/usr/share/sqm-autorate/launcher.sh | 26 + .../root/usr/share/sqm-autorate/lib.sh | 149 + luci-app-sysupgrade/Makefile | 11 + .../luasrc/view/sysupgrade.htm | 126 + luci-app-sysupgrade/po/fr/sysupgrade.po | 97 + luci-app-sysupgrade/po/ru/sysupgrade.po | 94 + .../po/templates/sysupgrade.pot | 81 + luci-app-sysupgrade/po/zh_Hans/sysupgrade.po | 90 + .../root/etc/init.d/sysupgrade | 20 + .../root/etc/uci-defaults/40_luci-sysupgrade | 20 + .../luci/menu.d/luci-app-sysupgrade.json | 13 + .../root/usr/share/rpcd/acl.d/sysupgrade.json | 34 + .../www/luci-static/resources/sysupgrade.js | 389 + luci-base/po/oc/base.po | 7620 +++++++ luci-base/po/templates/base.pot | 7611 +++++++ luci-mod-dashboard/Makefile | 21 + .../resources/view/dashboard/css/custom.css | 300 + .../view/dashboard/icons/devices.svg | 1 + .../view/dashboard/icons/internet.svg | 1 + .../view/dashboard/icons/not-internet.svg | 1 + .../resources/view/dashboard/icons/router.svg | 1 + .../view/dashboard/icons/wireless.svg | 1 + .../view/dashboard/include/10_router.js | 384 + .../view/dashboard/include/20_lan.js | 152 + .../view/dashboard/include/30_wifi.js | 269 + .../resources/view/dashboard/index.js | 110 + luci-mod-dashboard/po/fr/dashboard.po | 223 + luci-mod-dashboard/po/ru/dashboard.po | 224 + luci-mod-dashboard/po/templates/dashboard.pot | 214 + luci-mod-dashboard/po/zh_Hans/dashboard.po | 223 + .../share/luci/menu.d/luci-mod-dashboard.json | 13 + .../share/rpcd/acl.d/luci-mod-dashboard.json | 41 + luci-proto-mbim/Makefile | 0 .../luci-static/resources/protocol/mbim.js | 80 +- luci-theme-argon/LICENSE | 201 + luci-theme-argon/Makefile | 16 + luci-theme-argon/README.md | 114 + luci-theme-argon/README_ZH.md | 110 + .../Screenshots/screenshot_pc.jpg | Bin 0 -> 673706 bytes .../Screenshots/screenshot_phone.jpg | Bin 0 -> 467306 bytes .../luci-static/argon/background/README.md | 2 + .../htdocs/luci-static/argon/css/cascade.css | 9 + .../htdocs/luci-static/argon/css/dark.css | 1 + .../htdocs/luci-static/argon/favicon.ico | Bin 0 -> 15406 bytes .../luci-static/argon/fonts/TypoGraphica.eot | Bin 0 -> 33846 bytes .../luci-static/argon/fonts/TypoGraphica.svg | 1191 + .../luci-static/argon/fonts/TypoGraphica.ttf | Bin 0 -> 33632 bytes .../luci-static/argon/fonts/TypoGraphica.woff | Bin 0 -> 17816 bytes .../htdocs/luci-static/argon/fonts/argon.eot | Bin 0 -> 8888 bytes .../htdocs/luci-static/argon/fonts/argon.svg | 38 + .../htdocs/luci-static/argon/fonts/argon.ttf | Bin 0 -> 8732 bytes .../htdocs/luci-static/argon/fonts/argon.woff | Bin 0 -> 8808 bytes .../argon/icon/android-icon-192x192.png | Bin 0 -> 6411 bytes .../argon/icon/apple-icon-144x144.png | Bin 0 -> 5222 bytes .../argon/icon/apple-icon-60x60.png | Bin 0 -> 2561 bytes .../argon/icon/apple-icon-72x72.png | Bin 0 -> 2877 bytes .../htdocs/luci-static/argon/icon/arrow.svg | 1 + .../luci-static/argon/icon/browserconfig.xml | 2 + .../luci-static/argon/icon/favicon-16x16.png | Bin 0 -> 1019 bytes .../luci-static/argon/icon/favicon-32x32.png | Bin 0 -> 1720 bytes .../luci-static/argon/icon/favicon-96x96.png | Bin 0 -> 3650 bytes .../luci-static/argon/icon/manifest.json | 41 + .../argon/icon/ms-icon-144x144.png | Bin 0 -> 5222 bytes .../htdocs/luci-static/argon/icon/spinner.svg | 1 + .../htdocs/luci-static/argon/img/argon.svg | 61 + .../htdocs/luci-static/argon/img/bg1.jpg | Bin 0 -> 159265 bytes .../htdocs/luci-static/argon/img/blank.png | Bin 0 -> 938 bytes .../luci-static/argon/img/volume_high.svg | 1 + .../luci-static/argon/img/volume_off.svg | 1 + .../htdocs/luci-static/argon/js/jquery.min.js | 2 + .../luci-static/argon/js/polyfill.min.js | 3 + .../luci-static/argon/less/cascade.less | 4063 ++++ .../htdocs/luci-static/argon/less/dark.less | 830 + .../htdocs/luci-static/argon/less/fonts.less | 190 + .../luci-static/argon/less/pure-min.less | 12 + .../luci-static/resources/menu-argon.js | 158 + .../luasrc/view/themes/argon/footer.htm | 46 + .../luasrc/view/themes/argon/footer_login.htm | 44 + .../luasrc/view/themes/argon/header.htm | 180 + .../luasrc/view/themes/argon/header_login.htm | 119 + .../view/themes/argon/out_footer_login.htm | 27 + .../view/themes/argon/out_header_login.htm | 14 + .../luasrc/view/themes/argon/sysauth.htm | 186 + .../root/etc/uci-defaults/30_luci-theme-argon | 12 + .../root/usr/libexec/argon/bing_wallpaper | 52 + luci-theme-openmptcprouter/Makefile | 0 .../luci-static/openmptcprouter/html5.js | 0 .../luci-static/openmptcprouter/mobile.css | 0 macvlan/Makefile | 0 macvlan/files/etc/config/macvlan | 0 .../etc/uci-defaults/40_luci-app-macvlan | 0 mlvpn/Makefile | 0 mlvpn/files/etc/config/mlvpn | 0 mlvpn/files/etc/uci-defaults/4100-mlvpn | 0 mlvpn/patches/020-remove-cdefs.patch | 0 modemmanager/Config.in | 30 - modemmanager/Makefile | 138 - modemmanager/README.md | 40 - modemmanager/files/10-report-down | 35 - modemmanager/files/25-modemmanager-net | 31 - modemmanager/files/25-modemmanager-tty | 16 - modemmanager/files/25-modemmanager-usb | 13 - modemmanager/files/25-modemmanager-wwan | 15 - modemmanager/files/modemmanager.common | 350 - modemmanager/files/modemmanager.init | 38 - modemmanager/files/modemmanager.proto | 546 - .../files/usr/sbin/ModemManager-wrapper | 33 - mptcp/Makefile | 0 mptcp/files/etc/hotplug.d/iface/30-mptcp | 0 mptcpd/Makefile | 0 mptcpd/patches/endian.patch | 0 mptcpd/patches/stub_error_h.patch | 0 msmtp/Makefile | 9 +- net-tools/Makefile | 74 + net-tools/patches/mptcp-support.patch | 338 + netifd/Makefile | 52 + netifd/files/etc/hotplug.d/iface/00-netstate | 6 + .../etc/hotplug.d/net/20-smp-packet-steering | 67 + netifd/files/etc/init.d/network | 144 + .../etc/uci-defaults/14_migrate-dhcp-release | 23 + netifd/files/etc/udhcpc.user | 1 + netifd/files/lib/netifd/dhcp.script | 120 + netifd/files/lib/netifd/proto/dhcp.sh | 89 + netifd/files/lib/network/config.sh | 76 + netifd/files/sbin/devstatus | 12 + netifd/files/sbin/ifdown | 1 + netifd/files/sbin/ifstatus | 13 + netifd/files/sbin/ifup | 77 + netifd/files/usr/share/udhcpc/default.script | 57 + netmaker-openwrt/LICENSE | 8 + netmaker-openwrt/README.md | 111 + netmaker-openwrt/netmaker/Makefile | 93 + .../netmaker/root/etc/init.d/netclient | 42 + netmaker-openwrt/scripts/build_ipk.sh | 177 + omr-6in4/Makefile | 0 openmptcprouter/files/etc/firewall.gre-tunnel | 6 +- openmptcprouter/files/etc/init.d/fengshan | 17 + .../files/etc/uci-defaults/2090-omr-wwan | 12 - pdnsd-alt/Makefile | 57 + pdnsd-alt/files/pdnsd.init | 46 + pdnsd-alt/patches/010-no-doc-and-test.patch | 42 + pdnsd-alt/patches/020-headers.patch | 66 + protobuf/Makefile | 0 r8125/Makefile | 37 + r8125/patches/010-config.patch | 22 + r8125/patches/020-5.19-support.patch | 18 + r8125/patches/021-6.1-suppot.patch | 14 + .../030-add-LED-configuration-from-OF.patch | 43 + r8152/Makefile | 55 + r8152/patches/010-5.19-support.patch | 19 + r8152/patches/020-6.1-support.patch | 38 + .../100-add-LED-configuration-from-OF.patch | 74 + r8168/Makefile | 39 + ...-r8168-add-LED-configuration-from-OF.patch | 42 + r8168/patches/020-5.18-support.patch | 47 + r8168/patches/030-5.19-support.patch | 18 + r8168/patches/030-6.1-support.patch | 14 + serdisplib/Makefile | 58 + shortcut-fe/fast-classifier/Makefile | 109 + shortcut-fe/fast-classifier/src/Makefile | 10 + .../fast-classifier/src/fast-classifier.c | 2002 ++ .../fast-classifier/src/fast-classifier.h | 57 + .../fast-classifier/src/nl_classifier_test.c | 281 + .../fast-classifier/src/userspace_example.c | 232 + shortcut-fe/shortcut-fe/Makefile | 92 + .../shortcut-fe/files/etc/init.d/shortcut-fe | 51 + .../shortcut-fe/files/usr/bin/sfe_dump | 35 + shortcut-fe/shortcut-fe/src/Kconfig | 14 + shortcut-fe/shortcut-fe/src/Makefile | 24 + shortcut-fe/shortcut-fe/src/sfe.h | 114 + shortcut-fe/shortcut-fe/src/sfe_backport.h | 195 + shortcut-fe/shortcut-fe/src/sfe_cm.c | 1210 + shortcut-fe/shortcut-fe/src/sfe_cm.h | 260 + shortcut-fe/shortcut-fe/src/sfe_ipv4.c | 3618 +++ shortcut-fe/shortcut-fe/src/sfe_ipv6.c | 3625 +++ shortcut-fe/simulated-driver/Makefile | 60 + .../patches/200-nss-qdisc-support.patch | 11 + speedtestc/Makefile | 0 speedtestcpp/Makefile | 0 syslogd/Makefile | 59 + syslogd/files/etc/init.d/syslogd | 24 + tracebox/patches/105-configure-header.patch | 10 + tsping/Makefile | 0 v2ray-core/Makefile | 7 +- xtables-addons/Makefile | 200 - .../001-fix-kernel-version-detection.patch | 11 - .../patches/100-add-rtsp-conntrack.patch | 1742 -- .../patches/200-add-lua-packetscript.patch | 18168 ---------------- .../patches/201-fix-lua-packetscript.patch | 147 - .../patches/210-freebsd-build-fix.patch | 11 - 797 files changed, 70531 insertions(+), 22374 deletions(-) create mode 100755 6in4/Makefile create mode 100755 6in4/files/6in4.sh create mode 100755 aquantia/Makefile create mode 100755 bcm27xx-eeprom/Makefile create mode 100755 bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch create mode 100755 bcm27xx-eeprom/patches/0003-rpi-eeprom-update-change-default-include-path.patch create mode 100755 bcm27xx-eeprom/patches/0004-rpi-eeprom-update-chmod-silent-f-is-not-supported.patch create mode 100755 bcm27xx-eeprom/patches/0005-rpi-eeprom-config-change-default-text-editor.patch create mode 100755 cryptodev-linux/Makefile create mode 100755 fullconenat/Makefile create mode 100755 fullconenat/patches/001-fix-init-Repeat-definition.patch create mode 100755 fullconenat/patches/001-linux-6.1-support.patch create mode 100755 fullconenat/src/Makefile mode change 100644 => 100755 https-dns-proxy/Makefile mode change 100644 => 100755 https-dns-proxy/files/README.md mode change 100644 => 100755 https-dns-proxy/files/https-dns-proxy.config delete mode 100644 https-dns-proxy/files/https-dns-proxy.defaults mode change 100644 => 100755 https-dns-proxy/files/https-dns-proxy.hotplug.iface rename https-dns-proxy/patches/{010-cmakelists-remove-cflags.patch => 010-fix-cmakelists.patch} (56%) mode change 100644 => 100755 delete mode 100644 https-dns-proxy/patches/020-src-options.c-add-version.patch mode change 100644 => 100755 https-dns-proxy/test.sh mode change 100644 => 100755 ipcalc/Makefile mode change 100644 => 100755 iproute2/Makefile mode change 100644 => 100755 iproute2/patches/100-configure.patch mode change 100644 => 100755 iproute2/patches/110-darwin_fixes.patch mode change 100644 => 100755 iproute2/patches/115-add-config-xtlibdir.patch mode change 100644 => 100755 iproute2/patches/120-no_arpd_ifstat_rtacct_lnstat.patch mode change 100644 => 100755 iproute2/patches/130-no_netem_tipc_dcb_man_vdpa.patch mode change 100644 => 100755 iproute2/patches/140-allow_pfifo_fast.patch mode change 100644 => 100755 iproute2/patches/140-keep_libmnl_optional.patch mode change 100644 => 100755 iproute2/patches/145-keep_libelf_optional.patch mode change 100644 => 100755 iproute2/patches/150-keep_libcap_optional.patch mode change 100644 => 100755 iproute2/patches/155-keep_tirpc_optional.patch mode change 100644 => 100755 iproute2/patches/160-libnetlink-pic.patch mode change 100644 => 100755 iproute2/patches/170-ip_tiny.patch mode change 100644 => 100755 iproute2/patches/175-reduce-dynamic-syms.patch mode change 100644 => 100755 iproute2/patches/180-drop_FAILED_POLICY.patch mode change 100644 => 100755 iproute2/patches/190-fix-nls-rpath-link.patch mode change 100644 => 100755 iproute2/patches/195-build_variant_ip_tc.patch mode change 100644 => 100755 iproute2/patches/200-drop_libbsd_dependency.patch mode change 100644 => 100755 iproute2/patches/300-selinux-configurable.patch create mode 100755 lcd4linux/Config.in create mode 100755 lcd4linux/Makefile create mode 100755 lcd4linux/files/lcd4linux.init create mode 100755 lcd4linux/patches/120-remove-as-needed-linker-option.patch create mode 100755 lcd4linux/patches/140-no_repnop_T6963.patch create mode 100755 lcd4linux/patches/150-addlibmpdclient.patch create mode 100755 lcd4linux/patches/160-uinput_defs.patch create mode 100755 lcd4linux/patches/170-add-generic-spidev-driver.patch create mode 100755 lcd4linux/patches/173-glcd2usb-bigendian-fix.patch mode change 100644 => 100755 libell/Makefile delete mode 100755 libmbim/Makefile delete mode 100755 libqmi/Config.in delete mode 100755 libqmi/Makefile create mode 100755 luci-app-adguardhome/Makefile create mode 100755 luci-app-adguardhome/luasrc/controller/AdGuardHome.lua create mode 100755 luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/base.lua create mode 100755 luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/log.lua create mode 100755 luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/manual.lua create mode 100755 luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_check.htm create mode 100755 luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_chpass.htm create mode 100755 luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_status.htm create mode 100755 luci-app-adguardhome/luasrc/view/AdGuardHome/log.htm create mode 100755 luci-app-adguardhome/luasrc/view/AdGuardHome/yamleditor.htm create mode 100755 luci-app-adguardhome/po/zh-cn create mode 100755 luci-app-adguardhome/po/zh_Hans/adguardhome.po create mode 100755 luci-app-adguardhome/root/etc/config/AdGuardHome create mode 100755 luci-app-adguardhome/root/etc/init.d/AdGuardHome create mode 100755 luci-app-adguardhome/root/etc/uci-defaults/40_luci-AdGuardHome create mode 100755 luci-app-adguardhome/root/usr/share/AdGuardHome/AdGuardHome_template.yaml create mode 100755 luci-app-adguardhome/root/usr/share/AdGuardHome/addhost.sh create mode 100755 luci-app-adguardhome/root/usr/share/AdGuardHome/firewall.start create mode 100755 luci-app-adguardhome/root/usr/share/AdGuardHome/getsyslog.sh create mode 100755 luci-app-adguardhome/root/usr/share/AdGuardHome/gfw2adg.sh create mode 100755 luci-app-adguardhome/root/usr/share/AdGuardHome/links.txt create mode 100755 luci-app-adguardhome/root/usr/share/AdGuardHome/tailto.sh create mode 100755 luci-app-adguardhome/root/usr/share/AdGuardHome/update_core.sh create mode 100755 luci-app-adguardhome/root/usr/share/AdGuardHome/waitnet.sh create mode 100755 luci-app-adguardhome/root/usr/share/AdGuardHome/watchconfig.sh create mode 100755 luci-app-adguardhome/root/usr/share/rpcd/acl.d/luci-app-adguardhome.json create mode 100755 luci-app-adguardhome/root/www/luci-static/resources/codemirror/addon/fold/foldcode.js create mode 100755 luci-app-adguardhome/root/www/luci-static/resources/codemirror/addon/fold/foldgutter.css create mode 100755 luci-app-adguardhome/root/www/luci-static/resources/codemirror/addon/fold/foldgutter.js create mode 100755 luci-app-adguardhome/root/www/luci-static/resources/codemirror/addon/fold/indent-fold.js create mode 100755 luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.css create mode 100755 luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.js create mode 100755 luci-app-adguardhome/root/www/luci-static/resources/codemirror/mode/yaml/yaml.js create mode 100755 luci-app-adguardhome/root/www/luci-static/resources/codemirror/theme/dracula.css create mode 100755 luci-app-adguardhome/root/www/luci-static/resources/twin-bcrypt.min.js create mode 100755 luci-app-cpufreq/Makefile create mode 100755 luci-app-cpufreq/luasrc/controller/cpufreq.lua create mode 100755 luci-app-cpufreq/luasrc/model/cbi/cpufreq.lua create mode 100755 luci-app-cpufreq/po/zh-cn/cpufreq.po create mode 100755 luci-app-cpufreq/root/etc/config/cpufreq create mode 100755 luci-app-cpufreq/root/etc/init.d/cpufreq create mode 100755 luci-app-cpufreq/root/etc/uci-defaults/10-cpufreq create mode 100755 luci-app-cpufreq/root/usr/share/rpcd/acl.d/luci-app-cpufreq.json create mode 100755 luci-app-diskman/Makefile create mode 100755 luci-app-diskman/luasrc/controller/diskman.lua create mode 100755 luci-app-diskman/luasrc/model/cbi/diskman/btrfs.lua create mode 100755 luci-app-diskman/luasrc/model/cbi/diskman/disks.lua create mode 100755 luci-app-diskman/luasrc/model/cbi/diskman/partition.lua create mode 100755 luci-app-diskman/luasrc/model/diskman.lua create mode 100755 luci-app-diskman/luasrc/view/diskman/cbi/disabled_button.htm create mode 100755 luci-app-diskman/luasrc/view/diskman/cbi/format_button.htm create mode 100755 luci-app-diskman/luasrc/view/diskman/cbi/inlinebutton.htm create mode 100755 luci-app-diskman/luasrc/view/diskman/cbi/xnullsection.htm create mode 100755 luci-app-diskman/luasrc/view/diskman/cbi/xsimpleform.htm create mode 100755 luci-app-diskman/luasrc/view/diskman/disk_info.htm create mode 100755 luci-app-diskman/luasrc/view/diskman/partition_info.htm create mode 100755 luci-app-diskman/luasrc/view/diskman/smart_detail.htm create mode 100755 luci-app-diskman/po/zh-cn/diskman.po create mode 100755 luci-app-diskman/po/zh_Hans create mode 100755 luci-app-dockerman/Makefile create mode 100755 luci-app-dockerman/depends.lst create mode 100755 luci-app-dockerman/htdocs/luci-static/resources/dockerman/containers.svg create mode 100755 luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-icon.png create mode 100755 luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-manager.css create mode 100755 luci-app-dockerman/htdocs/luci-static/resources/dockerman/folder-icon.png create mode 100755 luci-app-dockerman/htdocs/luci-static/resources/dockerman/images.svg create mode 100755 luci-app-dockerman/htdocs/luci-static/resources/dockerman/link-icon.png create mode 100755 luci-app-dockerman/htdocs/luci-static/resources/dockerman/networks.svg create mode 100755 luci-app-dockerman/htdocs/luci-static/resources/dockerman/tar.min.js create mode 100755 luci-app-dockerman/htdocs/luci-static/resources/dockerman/volumes.svg create mode 100755 luci-app-dockerman/luasrc/controller/dockerman.lua create mode 100755 luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua create mode 100755 luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua create mode 100755 luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua create mode 100755 luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua create mode 100755 luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua create mode 100755 luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua create mode 100755 luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua create mode 100755 luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua create mode 100755 luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua create mode 100755 luci-app-dockerman/luasrc/model/docker.lua create mode 100755 luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/container.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/container_console.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/container_stats.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/images_import.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/images_load.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/logs.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/overview.htm create mode 100755 luci-app-dockerman/luasrc/view/dockerman/volume_size.htm create mode 100755 luci-app-dockerman/po/templates/dockerman.pot create mode 100755 luci-app-dockerman/po/zh-cn/dockerman.po create mode 100755 luci-app-dockerman/po/zh_Hans create mode 100755 luci-app-dockerman/postinst create mode 100755 luci-app-dockerman/root/etc/init.d/dockerman create mode 100755 luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman create mode 100755 luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json mode change 100644 => 100755 luci-app-dsvpn/Makefile mode change 100644 => 100755 luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js mode change 100644 => 100755 luci-app-dsvpn/po/fr/dsvpn.po mode change 100644 => 100755 luci-app-dsvpn/po/fr/dsvpn.po~ mode change 100644 => 100755 luci-app-dsvpn/po/ru/dsvpn.po mode change 100644 => 100755 luci-app-dsvpn/po/templates/dsvpn.pot mode change 100644 => 100755 luci-app-dsvpn/po/zh_Hans/dsvpn.po mode change 100644 => 100755 luci-app-dsvpn/po/zh_Hans/dsvpn.po~ mode change 100644 => 100755 luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json mode change 100644 => 100755 luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json mode change 100644 => 100755 luci-app-firewall/Makefile mode change 100644 => 100755 luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js mode change 100644 => 100755 luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js mode change 100644 => 100755 luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js mode change 100644 => 100755 luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js mode change 100644 => 100755 luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js mode change 100644 => 100755 luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js mode change 100644 => 100755 luci-app-firewall/po/bg/firewall.po mode change 100644 => 100755 luci-app-firewall/po/ca/firewall.po mode change 100644 => 100755 luci-app-firewall/po/cs/firewall.po mode change 100644 => 100755 luci-app-firewall/po/de/firewall.po mode change 100644 => 100755 luci-app-firewall/po/el/firewall.po mode change 100644 => 100755 luci-app-firewall/po/en/firewall.po mode change 100644 => 100755 luci-app-firewall/po/es/firewall.po mode change 100644 => 100755 luci-app-firewall/po/fr/firewall.po mode change 100644 => 100755 luci-app-firewall/po/he/firewall.po mode change 100644 => 100755 luci-app-firewall/po/hi/firewall.po mode change 100644 => 100755 luci-app-firewall/po/hu/firewall.po mode change 100644 => 100755 luci-app-firewall/po/it/firewall.po mode change 100644 => 100755 luci-app-firewall/po/ja/firewall.po mode change 100644 => 100755 luci-app-firewall/po/ko/firewall.po mode change 100644 => 100755 luci-app-firewall/po/mr/firewall.po mode change 100644 => 100755 luci-app-firewall/po/ms/firewall.po mode change 100644 => 100755 luci-app-firewall/po/nb_NO/firewall.po mode change 100644 => 100755 luci-app-firewall/po/pl/firewall.po mode change 100644 => 100755 luci-app-firewall/po/pt/firewall.po mode change 100644 => 100755 luci-app-firewall/po/pt_BR/firewall.po mode change 100644 => 100755 luci-app-firewall/po/ro/firewall.po mode change 100644 => 100755 luci-app-firewall/po/ru/firewall.po mode change 100644 => 100755 luci-app-firewall/po/sk/firewall.po mode change 100644 => 100755 luci-app-firewall/po/sv/firewall.po mode change 100644 => 100755 luci-app-firewall/po/templates/firewall.pot mode change 100644 => 100755 luci-app-firewall/po/tr/firewall.po mode change 100644 => 100755 luci-app-firewall/po/uk/firewall.po mode change 100644 => 100755 luci-app-firewall/po/vi/firewall.po mode change 100644 => 100755 luci-app-firewall/po/zh_Hans/firewall.po mode change 100644 => 100755 luci-app-firewall/po/zh_Hant/firewall.po mode change 100644 => 100755 luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json mode change 100644 => 100755 luci-app-firewall/root/usr/share/rpcd/acl.d/luci-app-firewall.json mode change 100644 => 100755 luci-app-glorytun-tcp/Makefile mode change 100644 => 100755 luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js mode change 100644 => 100755 luci-app-glorytun-tcp/po/fr/glorytun-tcp.po mode change 100644 => 100755 luci-app-glorytun-tcp/po/fr/glorytun-tcp.po~ mode change 100644 => 100755 luci-app-glorytun-tcp/po/ru/glorytun-tcp.po mode change 100644 => 100755 luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot mode change 100644 => 100755 luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po mode change 100644 => 100755 luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po~ mode change 100644 => 100755 luci-app-glorytun-tcp/root/etc/hotplug.d/iface/30-glorytun mode change 100644 => 100755 luci-app-glorytun-tcp/root/etc/uci-defaults/1200-luci-glorytun mode change 100644 => 100755 luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json mode change 100644 => 100755 luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json mode change 100644 => 100755 luci-app-glorytun-udp/Makefile mode change 100644 => 100755 luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js mode change 100644 => 100755 luci-app-glorytun-udp/po/fr/glorytun-udp.po mode change 100644 => 100755 luci-app-glorytun-udp/po/fr/glorytun-udp.po~ mode change 100644 => 100755 luci-app-glorytun-udp/po/ru/glorytun-udp.po mode change 100644 => 100755 luci-app-glorytun-udp/po/templates/glorytun-udp.pot mode change 100644 => 100755 luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po mode change 100644 => 100755 luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po~ mode change 100644 => 100755 luci-app-glorytun-udp/root/etc/config/glorytun-udp mode change 100644 => 100755 luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp mode change 100644 => 100755 luci-app-glorytun-udp/root/etc/uci-defaults/1201-luci-glorytun-udp mode change 100644 => 100755 luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json mode change 100644 => 100755 luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json mode change 100644 => 100755 luci-app-haproxy-tcp/LICENSE mode change 100644 => 100755 luci-app-haproxy-tcp/Makefile mode change 100644 => 100755 luci-app-haproxy-tcp/README.md mode change 100644 => 100755 luci-app-haproxy-tcp/luasrc/controller/haproxy-tcp.lua mode change 100644 => 100755 luci-app-haproxy-tcp/luasrc/model/cbi/haproxy-tcp.lua mode change 100644 => 100755 luci-app-haproxy-tcp/po/fr/haproxy-tcp.po mode change 100644 => 100755 luci-app-haproxy-tcp/po/templates/haproxy-tcp.pot mode change 100644 => 100755 luci-app-haproxy-tcp/po/zh-cn/haproxy-tcp.po mode change 100644 => 100755 luci-app-haproxy-tcp/root/etc/config/haproxy-tcp mode change 100644 => 100755 luci-app-haproxy-tcp/root/etc/uci-defaults/41_luci-haproxy-tcp mode change 100644 => 100755 luci-app-https-dns-proxy/Makefile mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns-family.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns-malware.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/css.htm mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status-textarea.htm mode change 100644 => 100755 luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status.htm mode change 100644 => 100755 luci-app-https-dns-proxy/po/bg/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/ca/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/cs/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/de/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/el/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/en/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/es/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/fr/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/he/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/hi/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/hu/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/it/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/ja/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/ko/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/mr/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/ms/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/nb_NO/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/pl/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/pt/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/pt_BR/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/ro/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/ru/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/sk/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/sv/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/templates/https-dns-proxy.pot mode change 100644 => 100755 luci-app-https-dns-proxy/po/tr/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/uk/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/vi/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/zh_Hans/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/po/zh_Hant/https-dns-proxy.po mode change 100644 => 100755 luci-app-https-dns-proxy/root/etc/uci-defaults/40_luci-https-dns-proxy mode change 100644 => 100755 luci-app-https-dns-proxy/root/usr/share/luci/menu.d/luci-app-https-dns-proxy.json mode change 100644 => 100755 luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json mode change 100644 => 100755 luci-app-iperf/Makefile mode change 100644 => 100755 luci-app-iperf/luasrc/controller/iperf.lua mode change 100644 => 100755 luci-app-iperf/luasrc/view/iperf/test.htm mode change 100644 => 100755 luci-app-iperf/po/de/iperf.po mode change 100644 => 100755 luci-app-iperf/po/de/iperf.po~ mode change 100644 => 100755 luci-app-iperf/po/fr/iperf.po mode change 100644 => 100755 luci-app-iperf/po/fr/iperf.po~ mode change 100644 => 100755 luci-app-iperf/po/it/iperf.po mode change 100644 => 100755 luci-app-iperf/po/it/iperf.po~ mode change 100644 => 100755 luci-app-iperf/po/oc/iperf.po mode change 100644 => 100755 luci-app-iperf/po/oc/iperf.po~ mode change 100644 => 100755 luci-app-iperf/po/ru/iperf.po mode change 100644 => 100755 luci-app-iperf/po/templates/iperf.pot mode change 100644 => 100755 luci-app-iperf/po/zh_Hans/iperf.po mode change 100644 => 100755 luci-app-iperf/po/zh_Hans/iperf.po~ mode change 100644 => 100755 luci-app-iperf/root/etc/config/iperf mode change 100644 => 100755 luci-app-iperf/root/usr/share/luci/menu.d/luci-app-iperf.json mode change 100644 => 100755 luci-app-iperf/root/usr/share/rpcd/acl.d/luci-app-iperf.json mode change 100644 => 100755 luci-app-macvlan/po/zh_Hans/macvlan.po mode change 100644 => 100755 luci-app-mail/Makefile mode change 100644 => 100755 luci-app-mail/luasrc/controller/mail.lua mode change 100644 => 100755 luci-app-mail/luasrc/model/cbi/mail.lua mode change 100644 => 100755 luci-app-mail/po/de/mail.po mode change 100644 => 100755 luci-app-mail/po/de/mail.po~ mode change 100644 => 100755 luci-app-mail/po/fr/mail.po mode change 100644 => 100755 luci-app-mail/po/fr/mail.po~ mode change 100644 => 100755 luci-app-mail/po/it/mail.po mode change 100644 => 100755 luci-app-mail/po/it/mail.po~ mode change 100644 => 100755 luci-app-mail/po/oc/mail.po mode change 100644 => 100755 luci-app-mail/po/oc/mail.po~ mode change 100644 => 100755 luci-app-mail/po/ru/mail.po mode change 100644 => 100755 luci-app-mail/po/templates/mail.pot mode change 100644 => 100755 luci-app-mail/po/zh_Hans/mail.po mode change 100644 => 100755 luci-app-mail/po/zh_Hans/mail.po~ mode change 100644 => 100755 luci-app-mail/root/etc/config/mail mode change 100644 => 100755 luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json mode change 100644 => 100755 luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json mode change 100644 => 100755 luci-app-mlvpn/Makefile mode change 100644 => 100755 luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js mode change 100644 => 100755 luci-app-mlvpn/po/fr/mlvpn.po mode change 100644 => 100755 luci-app-mlvpn/po/fr/mlvpn.po~ mode change 100644 => 100755 luci-app-mlvpn/po/ru/mlvpn.po mode change 100644 => 100755 luci-app-mlvpn/po/templates/mlvpn.pot mode change 100644 => 100755 luci-app-mlvpn/po/zh_Hans/mlvpn.po mode change 100644 => 100755 luci-app-mlvpn/po/zh_Hans/mlvpn.po~ mode change 100644 => 100755 luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json mode change 100644 => 100755 luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json mode change 100644 => 100755 luci-app-mptcp/Makefile mode change 100644 => 100755 luci-app-mptcp/htdocs/luci-static/resources/seedrandom.js mode change 100644 => 100755 luci-app-mptcp/luasrc/controller/mptcp.lua mode change 100644 => 100755 luci-app-mptcp/luasrc/model/cbi/mptcp.lua mode change 100644 => 100755 luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm mode change 100644 => 100755 luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm mode change 100644 => 100755 luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm mode change 100644 => 100755 luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm mode change 100644 => 100755 luci-app-mptcp/luasrc/view/mptcp/multipath.htm mode change 100644 => 100755 luci-app-mptcp/po/de/mptcp.po mode change 100644 => 100755 luci-app-mptcp/po/de/mptcp.po~ mode change 100644 => 100755 luci-app-mptcp/po/fr/mptcp.po mode change 100644 => 100755 luci-app-mptcp/po/it/mptcp.po mode change 100644 => 100755 luci-app-mptcp/po/it/mptcp.po~ mode change 100644 => 100755 luci-app-mptcp/po/oc/mptcp.po mode change 100644 => 100755 luci-app-mptcp/po/oc/mptcp.po~ mode change 100644 => 100755 luci-app-mptcp/po/ru/mptcp.po mode change 100644 => 100755 luci-app-mptcp/po/templates/mptcp.pot mode change 100644 => 100755 luci-app-mptcp/po/zh_Hans/mptcp.po mode change 100644 => 100755 luci-app-mptcp/root/usr/share/luci/menu.d/luci-app-mptcp.json mode change 100644 => 100755 luci-app-mptcp/root/usr/share/rpcd/acl.d/luci-app-mptcp.json mode change 100644 => 100755 luci-app-nginx-ha/LICENSE mode change 100644 => 100755 luci-app-nginx-ha/Makefile mode change 100644 => 100755 luci-app-nginx-ha/luasrc/controller/nginx-ha.lua mode change 100644 => 100755 luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua mode change 100644 => 100755 luci-app-nginx-ha/po/fr/nginx-ha.po mode change 100644 => 100755 luci-app-nginx-ha/po/templates/nginx-ha.pot mode change 100644 => 100755 luci-app-nginx-ha/root/etc/config/nginx-ha mode change 100644 => 100755 luci-app-nginx-ha/root/etc/uci-defaults/42_luci-nginx-ha mode change 100644 => 100755 luci-app-nginx-ha/root/usr/share/luci/menu.d/luci-app-nginx-ha.json mode change 100644 => 100755 luci-app-nginx-ha/root/usr/share/rpcd/acl.d/luci-app-nginx-ha.json mode change 100644 => 100755 luci-app-omr-bypass/Makefile mode change 100644 => 100755 luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js mode change 100644 => 100755 luci-app-omr-bypass/po/de/omr-bypass.po mode change 100644 => 100755 luci-app-omr-bypass/po/de/omr-bypass.po~ mode change 100644 => 100755 luci-app-omr-bypass/po/fr/omr-bypass.po mode change 100644 => 100755 luci-app-omr-bypass/po/it/omr-bypass.po mode change 100644 => 100755 luci-app-omr-bypass/po/it/omr-bypass.po~ mode change 100644 => 100755 luci-app-omr-bypass/po/oc/omr-bypass.po mode change 100644 => 100755 luci-app-omr-bypass/po/oc/omr-bypass.po~ mode change 100644 => 100755 luci-app-omr-bypass/po/ru/omr-bypass.po mode change 100644 => 100755 luci-app-omr-bypass/po/templates/omr-bypass.pot mode change 100644 => 100755 luci-app-omr-bypass/po/zh_Hans/omr-bypass.po mode change 100644 => 100755 luci-app-omr-bypass/root/etc/config/omr-bypass mode change 100644 => 100755 luci-app-omr-bypass/root/etc/firewall.omr-bypass mode change 100644 => 100755 luci-app-omr-bypass/root/usr/share/luci/menu.d/luci-app-omr-bypass.json mode change 100644 => 100755 luci-app-omr-bypass/root/usr/share/omr-bypass/omr-bypass-proto.lst mode change 100644 => 100755 luci-app-omr-bypass/root/usr/share/omr-bypass/omr-bypass.db mode change 100644 => 100755 luci-app-omr-bypass/root/usr/share/rpcd/acl.d/luci-app-omr-bypass.json mode change 100644 => 100755 luci-app-omr-dscp/Makefile mode change 100644 => 100755 luci-app-omr-dscp/luasrc/controller/omr-dscp.lua mode change 100644 => 100755 luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua mode change 100644 => 100755 luci-app-omr-dscp/luasrc/model/cbi/dscp.lua mode change 100644 => 100755 luci-app-omr-dscp/po/de/omr-dscp.po mode change 100644 => 100755 luci-app-omr-dscp/po/de/omr-dscp.po~ mode change 100644 => 100755 luci-app-omr-dscp/po/fr/omr-dscp.po mode change 100644 => 100755 luci-app-omr-dscp/po/fr/omr-dscp.po~ mode change 100644 => 100755 luci-app-omr-dscp/po/it/omr-dscp.po mode change 100644 => 100755 luci-app-omr-dscp/po/it/omr-dscp.po~ mode change 100644 => 100755 luci-app-omr-dscp/po/oc/omr-dscp.po mode change 100644 => 100755 luci-app-omr-dscp/po/oc/omr-dscp.po~ mode change 100644 => 100755 luci-app-omr-dscp/po/templates/omr-dscp.pot mode change 100644 => 100755 luci-app-omr-dscp/po/zh_Hans/omr-dscp.po mode change 100644 => 100755 luci-app-omr-dscp/po/zh_Hans/omr-dscp.po~ mode change 100644 => 100755 luci-app-omr-dscp/root/etc/config/dscp mode change 100644 => 100755 luci-app-omr-dscp/root/usr/share/luci/menu.d/luci-app-omr-dscp.json mode change 100644 => 100755 luci-app-omr-dscp/root/usr/share/rpcd/acl.d/luci-app-omr-dscp.json mode change 100644 => 100755 luci-app-omr-quota/Makefile mode change 100644 => 100755 luci-app-omr-quota/luasrc/controller/quota.lua mode change 100644 => 100755 luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua mode change 100644 => 100755 luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm mode change 100644 => 100755 luci-app-omr-quota/po/de/omr-quota.po mode change 100644 => 100755 luci-app-omr-quota/po/de/omr-quota.po~ mode change 100644 => 100755 luci-app-omr-quota/po/fr/omr-quota.po mode change 100644 => 100755 luci-app-omr-quota/po/fr/omr-quota.po~ mode change 100644 => 100755 luci-app-omr-quota/po/it/omr-quota.po mode change 100644 => 100755 luci-app-omr-quota/po/it/omr-quota.po~ mode change 100644 => 100755 luci-app-omr-quota/po/oc/omr-quota.po mode change 100644 => 100755 luci-app-omr-quota/po/oc/omr-quota.po~ mode change 100644 => 100755 luci-app-omr-quota/po/ru/omr-quota.po mode change 100644 => 100755 luci-app-omr-quota/po/templates/omr-quota.pot mode change 100644 => 100755 luci-app-omr-quota/po/zh_Hans/omr-quota.po mode change 100644 => 100755 luci-app-omr-quota/po/zh_Hans/omr-quota.po~ mode change 100644 => 100755 luci-app-omr-quota/root/usr/share/luci/menu.d/luci-app-omr-quota.json mode change 100644 => 100755 luci-app-omr-quota/root/usr/share/rpcd/acl.d/luci-app-omr-quota.json mode change 100644 => 100755 luci-app-omr-tracker/Makefile mode change 100644 => 100755 luci-app-omr-tracker/luasrc/controller/omr-tracker.lua mode change 100644 => 100755 luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua mode change 100644 => 100755 luci-app-omr-tracker/luasrc/view/omr-tracker/cbi-select-add.htm mode change 100644 => 100755 luci-app-omr-tracker/po/de/omr-tracker.po mode change 100644 => 100755 luci-app-omr-tracker/po/de/omr-tracker.po~ mode change 100644 => 100755 luci-app-omr-tracker/po/fr/omr-tracker.po mode change 100644 => 100755 luci-app-omr-tracker/po/fr/omr-tracker.po~ mode change 100644 => 100755 luci-app-omr-tracker/po/it/omr-tracker.po mode change 100644 => 100755 luci-app-omr-tracker/po/it/omr-tracker.po~ mode change 100644 => 100755 luci-app-omr-tracker/po/oc/omr-tracker.po mode change 100644 => 100755 luci-app-omr-tracker/po/oc/omr-tracker.po~ mode change 100644 => 100755 luci-app-omr-tracker/po/templates/omr-tracker.pot mode change 100644 => 100755 luci-app-omr-tracker/po/zh_Hans/omr-tracker.po mode change 100644 => 100755 luci-app-omr-tracker/root/etc/uci-defaults/42_luci-omr-tracker mode change 100644 => 100755 luci-app-omr-tracker/root/usr/share/luci/menu.d/luci-app-omr-tracker.json mode change 100644 => 100755 luci-app-omr-tracker/root/usr/share/rpcd/acl.d/luci-app-omr-tracker.json mode change 100644 => 100755 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/css/wanstatus.css mode change 100644 => 100755 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-doing.png mode change 100644 => 100755 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-done.png mode change 100644 => 100755 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-error.png mode change 100644 => 100755 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-todo.png mode change 100644 => 100755 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-warn.png mode change 100644 => 100755 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusError.png mode change 100644 => 100755 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusOK.png mode change 100644 => 100755 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusWarning.png mode change 100644 => 100755 luci-app-openmptcprouter/htdocs/luci-static/resources/spinner.gif mode change 100644 => 100755 luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua mode change 100644 => 100755 luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm mode change 100644 => 100755 luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm mode change 100644 => 100755 luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm mode change 100644 => 100755 luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm mode change 100644 => 100755 luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm mode change 100644 => 100755 luci-app-openmptcprouter/po/de/openmptcprouter.po mode change 100644 => 100755 luci-app-openmptcprouter/po/de/openmptcprouter.po~ mode change 100644 => 100755 luci-app-openmptcprouter/po/fr/openmptcprouter.po mode change 100644 => 100755 luci-app-openmptcprouter/po/fr/openmptcprouter.po~ mode change 100644 => 100755 luci-app-openmptcprouter/po/it/openmptcprouter.po mode change 100644 => 100755 luci-app-openmptcprouter/po/it/openmptcprouter.po~ mode change 100644 => 100755 luci-app-openmptcprouter/po/oc/openmptcprouter.po mode change 100644 => 100755 luci-app-openmptcprouter/po/oc/openmptcprouter.po~ mode change 100644 => 100755 luci-app-openmptcprouter/po/templates/openmptcprouter.pot mode change 100644 => 100755 luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po mode change 100644 => 100755 luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po~ mode change 100644 => 100755 luci-app-openmptcprouter/root/etc/config/openmptcprouter mode change 100644 => 100755 luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json mode change 100644 => 100755 luci-app-openmptcprouter/root/usr/share/rpcd/acl.d/luci-app-openmptcprouter.json create mode 100755 luci-app-packet-capture/Makefile create mode 100755 luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js create mode 100755 luci-app-packet-capture/po/fr/packet-capture.po create mode 100755 luci-app-packet-capture/po/templates/packet-capture.pot create mode 100755 luci-app-packet-capture/po/zh_Hans/packet-capture.po create mode 100755 luci-app-packet-capture/root/etc/config/packet_capture create mode 100755 luci-app-packet-capture/root/usr/libexec/packet_capture create mode 100755 luci-app-packet-capture/root/usr/libexec/packet_capture_start create mode 100755 luci-app-packet-capture/root/usr/libexec/packet_capture_stop create mode 100755 luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json create mode 100755 luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json mode change 100644 => 100755 luci-app-shadowsocks-libev/Makefile mode change 100644 => 100755 luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js mode change 100644 => 100755 luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js mode change 100644 => 100755 luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js mode change 100644 => 100755 luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js mode change 100644 => 100755 luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua mode change 100644 => 100755 luci-app-shadowsocks-libev/po/bg/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/ca/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/cs/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/de/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/el/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/en/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/es/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/fr/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/he/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/hi/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/hu/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/it/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/ja/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/ko/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/ms/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/nb_NO/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/pl/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/pt/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/pt_BR/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/ro/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/ru/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/sk/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot mode change 100644 => 100755 luci-app-shadowsocks-libev/po/tr/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/uk/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/vi/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/po/zh-tw/shadowsocks-libev.po mode change 100644 => 100755 luci-app-shadowsocks-libev/root/etc/uci-defaults/40_luci-shadowsocks-libev mode change 100644 => 100755 luci-app-shadowsocks-libev/root/usr/share/luci/menu.d/luci-app-shadowsocks-libev.json mode change 100644 => 100755 luci-app-shadowsocks-libev/root/usr/share/rpcd/acl.d/luci-app-shadowsocks-libev.json mode change 100644 => 100755 luci-app-shutdown/Makefile mode change 100644 => 100755 luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js mode change 100644 => 100755 luci-app-shutdown/po/de/shutdown.po mode change 100644 => 100755 luci-app-shutdown/po/fr/shutdown.po mode change 100644 => 100755 luci-app-shutdown/po/it/shutdown.po mode change 100644 => 100755 luci-app-shutdown/po/oc/shutdown.po mode change 100644 => 100755 luci-app-shutdown/po/pl/shutdown.po mode change 100644 => 100755 luci-app-shutdown/po/ru/shutdown.po mode change 100644 => 100755 luci-app-shutdown/po/templates/shutdown.pot mode change 100644 => 100755 luci-app-shutdown/po/zh_Hans/shutdown.po mode change 100644 => 100755 luci-app-shutdown/root/usr/share/luci/menu.d/luci-app-shutdown.json mode change 100644 => 100755 luci-app-shutdown/root/usr/share/rpcd/acl.d/luci-app-shutdown.json mode change 100644 => 100755 luci-app-snmpd/Makefile delete mode 100644 luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js mode change 100644 => 100755 luci-app-snmpd/luasrc/controller/snmpd.lua mode change 100644 => 100755 luci-app-snmpd/luasrc/model/cbi/snmpd.lua mode change 100644 => 100755 luci-app-snmpd/luasrc/view/snmpd.htm mode change 100644 => 100755 luci-app-snmpd/po/de/snmpd.po mode change 100644 => 100755 luci-app-snmpd/po/fr/snmpd.po mode change 100644 => 100755 luci-app-snmpd/po/it/snmpd.po mode change 100644 => 100755 luci-app-snmpd/po/oc/snmpd.po mode change 100644 => 100755 luci-app-snmpd/po/templates/snmpd.pot mode change 100644 => 100755 luci-app-snmpd/po/zh_Hans/snmpd.po mode change 100644 => 100755 luci-app-snmpd/root/etc/config/snmpd mode change 100644 => 100755 luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json mode change 100644 => 100755 luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json create mode 100755 luci-app-sqm-autorate/Makefile create mode 100755 luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js create mode 100755 luci-app-sqm-autorate/po/ar/sqm.po create mode 100755 luci-app-sqm-autorate/po/bg/sqm.po create mode 100755 luci-app-sqm-autorate/po/bn_BD/sqm.po create mode 100755 luci-app-sqm-autorate/po/ca/sqm.po create mode 100755 luci-app-sqm-autorate/po/cs/sqm.po create mode 100755 luci-app-sqm-autorate/po/da/sqm.po create mode 100755 luci-app-sqm-autorate/po/de/sqm.po create mode 100755 luci-app-sqm-autorate/po/el/sqm.po create mode 100755 luci-app-sqm-autorate/po/en/sqm.po create mode 100755 luci-app-sqm-autorate/po/es/sqm.po create mode 100755 luci-app-sqm-autorate/po/fi/sqm.po create mode 100755 luci-app-sqm-autorate/po/fr/sqm.po create mode 100755 luci-app-sqm-autorate/po/he/sqm.po create mode 100755 luci-app-sqm-autorate/po/hi/sqm.po create mode 100755 luci-app-sqm-autorate/po/hu/sqm.po create mode 100755 luci-app-sqm-autorate/po/it/sqm.po create mode 100755 luci-app-sqm-autorate/po/ja/sqm.po create mode 100755 luci-app-sqm-autorate/po/ko/sqm.po create mode 100755 luci-app-sqm-autorate/po/mr/sqm.po create mode 100755 luci-app-sqm-autorate/po/ms/sqm.po create mode 100755 luci-app-sqm-autorate/po/nb_NO/sqm.po create mode 100755 luci-app-sqm-autorate/po/pl/sqm.po create mode 100755 luci-app-sqm-autorate/po/pt/sqm.po create mode 100755 luci-app-sqm-autorate/po/pt_BR/sqm.po create mode 100755 luci-app-sqm-autorate/po/ro/sqm.po create mode 100755 luci-app-sqm-autorate/po/ru/sqm.po create mode 100755 luci-app-sqm-autorate/po/sk/sqm.po create mode 100755 luci-app-sqm-autorate/po/sv/sqm.po create mode 100755 luci-app-sqm-autorate/po/templates/sqm.pot create mode 100755 luci-app-sqm-autorate/po/tr/sqm.po create mode 100755 luci-app-sqm-autorate/po/uk/sqm.po create mode 100755 luci-app-sqm-autorate/po/vi/sqm.po create mode 100755 luci-app-sqm-autorate/po/zh_Hans/sqm.po create mode 100755 luci-app-sqm-autorate/po/zh_Hant/sqm.po create mode 100755 luci-app-sqm-autorate/root/etc/init.d/sqm-autorate create mode 100755 luci-app-sqm-autorate/root/etc/uci-defaults/50-luci-sqm create mode 120000 luci-app-sqm-autorate/root/root/cake-autorate create mode 100755 luci-app-sqm-autorate/root/usr/share/luci/menu.d/luci-app-sqm.json create mode 100755 luci-app-sqm-autorate/root/usr/share/rpcd/acl.d/luci-app-sqm.json create mode 100755 luci-app-sqm-autorate/root/usr/share/sqm-autorate/cake-autorate.sh create mode 100755 luci-app-sqm-autorate/root/usr/share/sqm-autorate/config.sh create mode 100755 luci-app-sqm-autorate/root/usr/share/sqm-autorate/config_template.sh create mode 100755 luci-app-sqm-autorate/root/usr/share/sqm-autorate/defaults.sh create mode 100755 luci-app-sqm-autorate/root/usr/share/sqm-autorate/launcher.sh create mode 100755 luci-app-sqm-autorate/root/usr/share/sqm-autorate/lib.sh create mode 100755 luci-app-sysupgrade/Makefile create mode 100755 luci-app-sysupgrade/luasrc/view/sysupgrade.htm create mode 100755 luci-app-sysupgrade/po/fr/sysupgrade.po create mode 100755 luci-app-sysupgrade/po/ru/sysupgrade.po create mode 100755 luci-app-sysupgrade/po/templates/sysupgrade.pot create mode 100755 luci-app-sysupgrade/po/zh_Hans/sysupgrade.po create mode 100755 luci-app-sysupgrade/root/etc/init.d/sysupgrade create mode 100755 luci-app-sysupgrade/root/etc/uci-defaults/40_luci-sysupgrade create mode 100755 luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json create mode 100755 luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json create mode 100755 luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js create mode 100755 luci-base/po/oc/base.po create mode 100755 luci-base/po/templates/base.pot create mode 100755 luci-mod-dashboard/Makefile create mode 100755 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/css/custom.css create mode 100755 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/devices.svg create mode 100755 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/internet.svg create mode 100755 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/not-internet.svg create mode 100755 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/router.svg create mode 100755 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/wireless.svg create mode 100755 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js create mode 100755 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js create mode 100755 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js create mode 100755 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/index.js create mode 100755 luci-mod-dashboard/po/fr/dashboard.po create mode 100755 luci-mod-dashboard/po/ru/dashboard.po create mode 100755 luci-mod-dashboard/po/templates/dashboard.pot create mode 100755 luci-mod-dashboard/po/zh_Hans/dashboard.po create mode 100755 luci-mod-dashboard/root/usr/share/luci/menu.d/luci-mod-dashboard.json create mode 100755 luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json mode change 100644 => 100755 luci-proto-mbim/Makefile mode change 100644 => 100755 luci-proto-mbim/htdocs/luci-static/resources/protocol/mbim.js create mode 100755 luci-theme-argon/LICENSE create mode 100755 luci-theme-argon/Makefile create mode 100755 luci-theme-argon/README.md create mode 100755 luci-theme-argon/README_ZH.md create mode 100755 luci-theme-argon/Screenshots/screenshot_pc.jpg create mode 100755 luci-theme-argon/Screenshots/screenshot_phone.jpg create mode 100755 luci-theme-argon/htdocs/luci-static/argon/background/README.md create mode 100755 luci-theme-argon/htdocs/luci-static/argon/css/cascade.css create mode 100755 luci-theme-argon/htdocs/luci-static/argon/css/dark.css create mode 100755 luci-theme-argon/htdocs/luci-static/argon/favicon.ico create mode 100755 luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.eot create mode 100755 luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.svg create mode 100755 luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.ttf create mode 100755 luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.woff create mode 100755 luci-theme-argon/htdocs/luci-static/argon/fonts/argon.eot create mode 100755 luci-theme-argon/htdocs/luci-static/argon/fonts/argon.svg create mode 100755 luci-theme-argon/htdocs/luci-static/argon/fonts/argon.ttf create mode 100755 luci-theme-argon/htdocs/luci-static/argon/fonts/argon.woff create mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/android-icon-192x192.png create mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-144x144.png create mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-60x60.png create mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-72x72.png create mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/arrow.svg create mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/browserconfig.xml create mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png create mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-32x32.png create mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-96x96.png create mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/manifest.json create mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/ms-icon-144x144.png create mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/spinner.svg create mode 100755 luci-theme-argon/htdocs/luci-static/argon/img/argon.svg create mode 100755 luci-theme-argon/htdocs/luci-static/argon/img/bg1.jpg create mode 100755 luci-theme-argon/htdocs/luci-static/argon/img/blank.png create mode 100755 luci-theme-argon/htdocs/luci-static/argon/img/volume_high.svg create mode 100755 luci-theme-argon/htdocs/luci-static/argon/img/volume_off.svg create mode 100755 luci-theme-argon/htdocs/luci-static/argon/js/jquery.min.js create mode 100755 luci-theme-argon/htdocs/luci-static/argon/js/polyfill.min.js create mode 100755 luci-theme-argon/htdocs/luci-static/argon/less/cascade.less create mode 100755 luci-theme-argon/htdocs/luci-static/argon/less/dark.less create mode 100755 luci-theme-argon/htdocs/luci-static/argon/less/fonts.less create mode 100755 luci-theme-argon/htdocs/luci-static/argon/less/pure-min.less create mode 100755 luci-theme-argon/htdocs/luci-static/resources/menu-argon.js create mode 100755 luci-theme-argon/luasrc/view/themes/argon/footer.htm create mode 100755 luci-theme-argon/luasrc/view/themes/argon/footer_login.htm create mode 100755 luci-theme-argon/luasrc/view/themes/argon/header.htm create mode 100755 luci-theme-argon/luasrc/view/themes/argon/header_login.htm create mode 100755 luci-theme-argon/luasrc/view/themes/argon/out_footer_login.htm create mode 100755 luci-theme-argon/luasrc/view/themes/argon/out_header_login.htm create mode 100755 luci-theme-argon/luasrc/view/themes/argon/sysauth.htm create mode 100755 luci-theme-argon/root/etc/uci-defaults/30_luci-theme-argon create mode 100755 luci-theme-argon/root/usr/libexec/argon/bing_wallpaper mode change 100644 => 100755 luci-theme-openmptcprouter/Makefile mode change 100644 => 100755 luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/html5.js mode change 100644 => 100755 luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/mobile.css mode change 100644 => 100755 macvlan/Makefile mode change 100644 => 100755 macvlan/files/etc/config/macvlan mode change 100644 => 100755 macvlan/files/etc/uci-defaults/40_luci-app-macvlan mode change 100644 => 100755 mlvpn/Makefile mode change 100644 => 100755 mlvpn/files/etc/config/mlvpn mode change 100644 => 100755 mlvpn/files/etc/uci-defaults/4100-mlvpn mode change 100644 => 100755 mlvpn/patches/020-remove-cdefs.patch delete mode 100644 modemmanager/Config.in delete mode 100644 modemmanager/Makefile delete mode 100644 modemmanager/README.md delete mode 100644 modemmanager/files/10-report-down delete mode 100644 modemmanager/files/25-modemmanager-net delete mode 100644 modemmanager/files/25-modemmanager-tty delete mode 100644 modemmanager/files/25-modemmanager-usb delete mode 100644 modemmanager/files/25-modemmanager-wwan delete mode 100644 modemmanager/files/modemmanager.common delete mode 100755 modemmanager/files/modemmanager.init delete mode 100755 modemmanager/files/modemmanager.proto delete mode 100644 modemmanager/files/usr/sbin/ModemManager-wrapper mode change 100644 => 100755 mptcp/Makefile mode change 100644 => 100755 mptcp/files/etc/hotplug.d/iface/30-mptcp mode change 100644 => 100755 mptcpd/Makefile mode change 100644 => 100755 mptcpd/patches/endian.patch mode change 100644 => 100755 mptcpd/patches/stub_error_h.patch mode change 100644 => 100755 msmtp/Makefile create mode 100755 net-tools/Makefile create mode 100755 net-tools/patches/mptcp-support.patch create mode 100755 netifd/Makefile create mode 100755 netifd/files/etc/hotplug.d/iface/00-netstate create mode 100755 netifd/files/etc/hotplug.d/net/20-smp-packet-steering create mode 100755 netifd/files/etc/init.d/network create mode 100755 netifd/files/etc/uci-defaults/14_migrate-dhcp-release create mode 100755 netifd/files/etc/udhcpc.user create mode 100755 netifd/files/lib/netifd/dhcp.script create mode 100755 netifd/files/lib/netifd/proto/dhcp.sh create mode 100755 netifd/files/lib/network/config.sh create mode 100755 netifd/files/sbin/devstatus create mode 120000 netifd/files/sbin/ifdown create mode 100755 netifd/files/sbin/ifstatus create mode 100755 netifd/files/sbin/ifup create mode 100755 netifd/files/usr/share/udhcpc/default.script create mode 100755 netmaker-openwrt/LICENSE create mode 100755 netmaker-openwrt/README.md create mode 100755 netmaker-openwrt/netmaker/Makefile create mode 100755 netmaker-openwrt/netmaker/root/etc/init.d/netclient create mode 100755 netmaker-openwrt/scripts/build_ipk.sh mode change 100644 => 100755 omr-6in4/Makefile create mode 100755 openmptcprouter/files/etc/init.d/fengshan create mode 100755 pdnsd-alt/Makefile create mode 100755 pdnsd-alt/files/pdnsd.init create mode 100755 pdnsd-alt/patches/010-no-doc-and-test.patch create mode 100755 pdnsd-alt/patches/020-headers.patch mode change 100644 => 100755 protobuf/Makefile create mode 100755 r8125/Makefile create mode 100755 r8125/patches/010-config.patch create mode 100755 r8125/patches/020-5.19-support.patch create mode 100755 r8125/patches/021-6.1-suppot.patch create mode 100755 r8125/patches/030-add-LED-configuration-from-OF.patch create mode 100755 r8152/Makefile create mode 100755 r8152/patches/010-5.19-support.patch create mode 100755 r8152/patches/020-6.1-support.patch create mode 100755 r8152/patches/100-add-LED-configuration-from-OF.patch create mode 100755 r8168/Makefile create mode 100755 r8168/patches/001-r8168-add-LED-configuration-from-OF.patch create mode 100755 r8168/patches/020-5.18-support.patch create mode 100755 r8168/patches/030-5.19-support.patch create mode 100755 r8168/patches/030-6.1-support.patch create mode 100755 serdisplib/Makefile create mode 100755 shortcut-fe/fast-classifier/Makefile create mode 100755 shortcut-fe/fast-classifier/src/Makefile create mode 100755 shortcut-fe/fast-classifier/src/fast-classifier.c create mode 100755 shortcut-fe/fast-classifier/src/fast-classifier.h create mode 100755 shortcut-fe/fast-classifier/src/nl_classifier_test.c create mode 100755 shortcut-fe/fast-classifier/src/userspace_example.c create mode 100755 shortcut-fe/shortcut-fe/Makefile create mode 100755 shortcut-fe/shortcut-fe/files/etc/init.d/shortcut-fe create mode 100755 shortcut-fe/shortcut-fe/files/usr/bin/sfe_dump create mode 100755 shortcut-fe/shortcut-fe/src/Kconfig create mode 100755 shortcut-fe/shortcut-fe/src/Makefile create mode 100755 shortcut-fe/shortcut-fe/src/sfe.h create mode 100755 shortcut-fe/shortcut-fe/src/sfe_backport.h create mode 100755 shortcut-fe/shortcut-fe/src/sfe_cm.c create mode 100755 shortcut-fe/shortcut-fe/src/sfe_cm.h create mode 100755 shortcut-fe/shortcut-fe/src/sfe_ipv4.c create mode 100755 shortcut-fe/shortcut-fe/src/sfe_ipv6.c create mode 100755 shortcut-fe/simulated-driver/Makefile create mode 100755 shortcut-fe/simulated-driver/patches/200-nss-qdisc-support.patch mode change 100644 => 100755 speedtestc/Makefile mode change 100644 => 100755 speedtestcpp/Makefile create mode 100644 syslogd/Makefile create mode 100755 syslogd/files/etc/init.d/syslogd create mode 100644 tracebox/patches/105-configure-header.patch mode change 100644 => 100755 tsping/Makefile delete mode 100644 xtables-addons/Makefile delete mode 100644 xtables-addons/patches/001-fix-kernel-version-detection.patch delete mode 100644 xtables-addons/patches/100-add-rtsp-conntrack.patch delete mode 100644 xtables-addons/patches/200-add-lua-packetscript.patch delete mode 100644 xtables-addons/patches/201-fix-lua-packetscript.patch delete mode 100644 xtables-addons/patches/210-freebsd-build-fix.patch diff --git a/6in4/Makefile b/6in4/Makefile new file mode 100755 index 000000000..d0f2ad30c --- /dev/null +++ b/6in4/Makefile @@ -0,0 +1,45 @@ +# +# Copyright (C) 2010-2015 OpenWrt.org +# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) +# - Added gateway setting +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=6in4 +PKG_VERSION:=270 +PKG_RELEASE:=2 +PKG_LICENSE:=GPL-2.0 + +include $(INCLUDE_DIR)/package.mk + +define Package/6in4 + SECTION:=net + CATEGORY:=Network + DEPENDS:=@IPV6 +kmod-sit +uclient-fetch + TITLE:=IPv6-in-IPv4 configuration support + MAINTAINER:=Jo-Philipp Wich + PKGARCH:=all +endef + +define Package/6in4/description +Provides support for 6in4 tunnels in /etc/config/network. +Refer to http://wiki.openwrt.org/doc/uci/network for +configuration details. +endef + +define Build/Compile +endef + +define Build/Configure +endef + +define Package/6in4/install + $(INSTALL_DIR) $(1)/lib/netifd/proto + $(INSTALL_BIN) ./files/6in4.sh $(1)/lib/netifd/proto/6in4.sh +endef + +$(eval $(call BuildPackage,6in4)) diff --git a/6in4/files/6in4.sh b/6in4/files/6in4.sh new file mode 100755 index 000000000..cf17c86d8 --- /dev/null +++ b/6in4/files/6in4.sh @@ -0,0 +1,149 @@ +#!/bin/sh +# 6in4.sh - IPv6-in-IPv4 tunnel backend +# Copyright (c) 2010-2015 OpenWrt.org + +[ -n "$INCLUDE_ONLY" ] || { + . /lib/functions.sh + . /lib/functions/network.sh + . ../netifd-proto.sh + init_proto "$@" +} + +proto_6in4_update() { + sh -c ' + timeout=5 + + (while [ $((timeout--)) -gt 0 ]; do + sleep 1 + kill -0 $$ || exit 0 + done; kill -9 $$) 2>/dev/null & + + exec "$@" + ' "$1" "$@" +} + +proto_6in4_add_prefix() { + append "$3" "$1" +} + +proto_6in4_setup() { + local cfg="$1" + local iface="$2" + local link="6in4-$cfg" + + local mtu ttl tos ipaddr peeraddr ip6addr ip6prefix ip6prefixes tunlink tunnelid username password updatekey gateway + json_get_vars mtu ttl tos ipaddr peeraddr ip6addr tunlink tunnelid username password updatekey gateway + json_for_each_item proto_6in4_add_prefix ip6prefix ip6prefixes + + [ -z "$peeraddr" ] && { + proto_notify_error "$cfg" "MISSING_ADDRESS" + proto_block_restart "$cfg" + return + } + + [ -n "$tunlink" ] && ( proto_add_host_dependency "$cfg" "$peeraddr" "$tunlink" ) + + [ -z "$ipaddr" ] && { + local wanif="$tunlink" + if [ -z "$wanif" ] && ! network_find_wan wanif; then + proto_notify_error "$cfg" "NO_WAN_LINK" + return + fi + + if ! network_get_ipaddr ipaddr "$wanif"; then + proto_notify_error "$cfg" "NO_WAN_LINK" + return + fi + } + + proto_init_update "$link" 1 + + [ -n "$ip6addr" ] && { + local local6="${ip6addr%%/*}" + local mask6="${ip6addr##*/}" + [[ "$local6" = "$mask6" ]] && mask6= + proto_add_ipv6_address "$local6" "$mask6" + proto_add_ipv6_route "::" 0 "" "" "" "$local6/$mask6" + } + + [ -n "$gateway" ] && { + proto_add_ipv6_route "::" 0 "$gateway" + } + + for ip6prefix in $ip6prefixes; do + proto_add_ipv6_prefix "$ip6prefix" + proto_add_ipv6_route "::" 0 "" "" "" "$ip6prefix" + done + + proto_add_tunnel + json_add_string mode sit + json_add_int mtu "${mtu:-1280}" + json_add_int ttl "${ttl:-64}" + [ -n "$tos" ] && json_add_string tos "$tos" + json_add_string local "$ipaddr" + json_add_string remote "$peeraddr" + [ -n "$tunlink" ] && json_add_string link "$tunlink" + proto_close_tunnel + + proto_send_update "$cfg" + + [ -n "$tunnelid" -a -n "$username" -a \( -n "$password" -o -n "$updatekey" \) ] && { + [ -n "$updatekey" ] && password="$updatekey" + + local http="http" + local urlget="uclient-fetch" + local urlget_opts="-qO-" + local ca_path="${SSL_CERT_DIR:-/etc/ssl/certs}" + + [ -f /lib/libustream-ssl.so ] && http=https + [ "$http" = "https" -a -z "$(find $ca_path -name "*.0" 2>/dev/null)" ] && { + urlget_opts="$urlget_opts --no-check-certificate" + } + + local url="$http://ipv4.tunnelbroker.net/nic/update?hostname=$tunnelid" + local try=0 + local max=3 + + ( + set -o pipefail + while [ $((++try)) -le $max ]; do + if proto_6in4_update $urlget $urlget_opts --user="$username" --password="$password" "$url" 2>&1 | \ + sed -e 's,^Killed$,timeout,' -e "s,^,update $try/$max: ," | \ + logger -t "$link"; + then + logger -t "$link" "updated" + return 0 + fi + sleep 5 + done + logger -t "$link" "update failed" + ) + } +} + +proto_6in4_teardown() { + local cfg="$1" +} + +proto_6in4_init_config() { + no_device=1 + available=1 + + proto_config_add_string "ipaddr" + proto_config_add_string "ip6addr" + proto_config_add_array "ip6prefix" + proto_config_add_string "peeraddr" + proto_config_add_string "tunlink" + proto_config_add_string "tunnelid" + proto_config_add_string "username" + proto_config_add_string "password" + proto_config_add_string "updatekey" + proto_config_add_string "gateway" + proto_config_add_int "mtu" + proto_config_add_int "ttl" + proto_config_add_string "tos" +} + +[ -n "$INCLUDE_ONLY" ] || { + add_protocol 6in4 +} diff --git a/aquantia/Makefile b/aquantia/Makefile new file mode 100755 index 000000000..f99bb0c90 --- /dev/null +++ b/aquantia/Makefile @@ -0,0 +1,41 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=kmod-aquantia +PKG_VERSION:=1.0 +PKG_RELEASE:=1 + +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/package.mk + +define KernelPackage/phy-aquantia + SUBMENU:=Network Devices + TITLE:=aQuantia device support + DEPENDS:=@PCI_SUPPORT @TARGET_x86_64 @KERNEL_5_4 +kmod-i2c-core +kmod-i2c-algo-bit +kmod-ptp +kmod-hwmon-core +kmod-libphy + KCONFIG:=CONFIG_AQUANTIA_PHY + HIDDEN:=1 + FILES:=$(LINUX_DIR)/drivers/net/phy/aquantia.ko + AUTOLOAD:=$(call AutoProbe,aquantia) +endef + +define KernelPackage/phy-aquantia/description + Kernel modules for aQuantia Ethernet adapters. +endef + +define KernelPackage/atlantic + SUBMENU:=Network Devices + TITLE:=aQuantia AQtion(tm) Support + DEPENDS:=@PCI_SUPPORT @TARGET_x86_64 @KERNEL_5_4 +kmod-i2c-core +kmod-i2c-algo-bit +kmod-ptp +kmod-phy-aquantia + KCONFIG:=CONFIG_AQTION + FILES:=$(LINUX_DIR)/drivers/net/ethernet/aquantia/atlantic/atlantic.ko + AUTOLOAD:=$(call AutoProbe,atlantic) +endef + +define KernelPackage/atlantic/description + Kernel modules for the aQuantia AQtion(tm) Ethernet card +endef + +define Build/Compile +endef + +$(eval $(call KernelPackage,phy-aquantia)) +$(eval $(call KernelPackage,atlantic)) \ No newline at end of file diff --git a/bcm27xx-eeprom/Makefile b/bcm27xx-eeprom/Makefile new file mode 100755 index 000000000..b114ee11a --- /dev/null +++ b/bcm27xx-eeprom/Makefile @@ -0,0 +1,59 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=bcm27xx-eeprom +PKG_VERSION:=v2022.04.26-138a1 +PKG_RELEASE:=$(AUTORELEASE) + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://codeload.github.com/raspberrypi/rpi-eeprom/tar.gz/$(PKG_VERSION)? +PKG_HASH:=7c54839e68f226c5853fb63c8a1539b729d84b2e6bac311a51766c601d10a413 + +PKG_LICENSE:=BSD-3-Clause Custom +PKG_LICENSE_FILES:=LICENSE + +PKG_MAINTAINER:=Álvaro Fernández Rojas + +include $(INCLUDE_DIR)/package.mk + +TAR_OPTIONS:=--strip-components 1 $(TAR_OPTIONS) +TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS) + +define Package/bcm27xx-eeprom + SECTION:=utils + CATEGORY:=Utilities + DEPENDS:=bcm27xx-userland +blkid +coreutils +coreutils-od +pciutils +python3-light + TITLE:=BCM27xx EEPROM tools +endef + +define Package/bcm27xx-eeprom/description + BCM27xx EEPROM tools. +endef + +define Build/Compile + true +endef + +define Package/bcm27xx-eeprom/conffiles +/etc/bcm27xx-eeprom.conf +endef + +define Package/bcm27xx-eeprom/install + $(INSTALL_DIR) $(1)/etc + $(INSTALL_CONF) $(PKG_BUILD_DIR)/rpi-eeprom-update-default $(1)/etc/bcm27xx-eeprom.conf + + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/rpi-eeprom-config $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/rpi-eeprom-digest $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/rpi-eeprom-update $(1)/usr/bin + + $(INSTALL_DIR) $(1)/lib/firmware/raspberrypi/bootloader + $(CP) $(PKG_BUILD_DIR)/firmware/release-notes.md $(1)/lib/firmware/raspberrypi/bootloader + + $(INSTALL_DIR) $(1)/lib/firmware/raspberrypi/bootloader/critical + $(CP) $(PKG_BUILD_DIR)/firmware/critical/ $(1)/lib/firmware/raspberrypi/bootloader/ + + $(INSTALL_DIR) $(1)/lib/firmware/raspberrypi/bootloader/stable + $(CP) $(PKG_BUILD_DIR)/firmware/stable/ $(1)/lib/firmware/raspberrypi/bootloader/ +endef + +$(eval $(call BuildPackage,bcm27xx-eeprom)) diff --git a/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch b/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch new file mode 100755 index 000000000..7fc10a8a5 --- /dev/null +++ b/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch @@ -0,0 +1,45 @@ +From da37f7b051fe6833e25e78184cc9217dd4379187 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= +Date: Mon, 23 Mar 2020 10:10:55 +0100 +Subject: [PATCH] rpi-eeprom-update: OpenWrt defaults +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Álvaro Fernández Rojas +--- + rpi-eeprom-update | 6 +++--- + rpi-eeprom-update-default | 5 +++-- + 2 files changed, 6 insertions(+), 5 deletions(-) + +--- a/rpi-eeprom-update ++++ b/rpi-eeprom-update +@@ -24,12 +24,12 @@ else + fi + + # Selects the release sub-directory +-FIRMWARE_RELEASE_STATUS=${FIRMWARE_RELEASE_STATUS:-default} ++FIRMWARE_RELEASE_STATUS=${FIRMWARE_RELEASE_STATUS:-stable} + FIRMWARE_IMAGE_DIR=${FIRMWARE_IMAGE_DIR:-${FIRMWARE_ROOT}/${FIRMWARE_RELEASE_STATUS}} +-FIRMWARE_BACKUP_DIR=${FIRMWARE_BACKUP_DIR:-/var/lib/raspberrypi/bootloader/backup} ++FIRMWARE_BACKUP_DIR=${FIRMWARE_BACKUP_DIR:-${FIRMWARE_ROOT}/backup} + ENABLE_VL805_UPDATES=${ENABLE_VL805_UPDATES:-1} + RECOVERY_BIN=${RECOVERY_BIN:-${FIRMWARE_ROOT}/${FIRMWARE_RELEASE_STATUS}/recovery.bin} + BOOTFS=${BOOTFS:-/boot} + CM4_ENABLE_RPI_EEPROM_UPDATE=${CM4_ENABLE_RPI_EEPROM_UPDATE:-0} + RPI_EEPROM_UPDATE_CONFIG_TOOL="${RPI_EEPROM_UPDATE_CONFIG_TOOL:-raspi-config}" + +--- a/rpi-eeprom-update-default ++++ b/rpi-eeprom-update-default +@@ -1,8 +1,9 @@ + + FIRMWARE_ROOT=/lib/firmware/raspberrypi/bootloader +-FIRMWARE_RELEASE_STATUS="critical" ++FIRMWARE_RELEASE_STATUS="stable" + FIRMWARE_IMAGE_DIR="${FIRMWARE_ROOT}/${FIRMWARE_RELEASE_STATUS}" +-FIRMWARE_BACKUP_DIR="/var/lib/raspberrypi/bootloader/backup" ++FIRMWARE_BACKUP_DIR="${FIRMWARE_ROOT}/backup" + BOOTFS=/boot + USE_FLASHROM=0 + EEPROM_CONFIG_HOOK= ++VCMAILBOX=/usr/bin/vcmailbox diff --git a/bcm27xx-eeprom/patches/0003-rpi-eeprom-update-change-default-include-path.patch b/bcm27xx-eeprom/patches/0003-rpi-eeprom-update-change-default-include-path.patch new file mode 100755 index 000000000..f24a9c3f1 --- /dev/null +++ b/bcm27xx-eeprom/patches/0003-rpi-eeprom-update-change-default-include-path.patch @@ -0,0 +1,26 @@ +From 6674d49dea0104031b3f54df4c7a356dc4307bb2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= +Date: Wed, 25 Mar 2020 20:58:35 +0100 +Subject: [PATCH] rpi-eeprom-update: change default include path +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Álvaro Fernández Rojas +--- + rpi-eeprom-update | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/rpi-eeprom-update ++++ b/rpi-eeprom-update +@@ -6,8 +6,8 @@ set -e + + script_dir=$(cd "$(dirname "$0")" && pwd) + +-if [ -f /etc/default/rpi-eeprom-update ]; then +- . /etc/default/rpi-eeprom-update ++if [ -f /etc/bcm27xx-eeprom.conf ]; then ++ . /etc/bcm27xx-eeprom.conf + fi + + LOCAL_MODE=0 diff --git a/bcm27xx-eeprom/patches/0004-rpi-eeprom-update-chmod-silent-f-is-not-supported.patch b/bcm27xx-eeprom/patches/0004-rpi-eeprom-update-chmod-silent-f-is-not-supported.patch new file mode 100755 index 000000000..5872f12da --- /dev/null +++ b/bcm27xx-eeprom/patches/0004-rpi-eeprom-update-chmod-silent-f-is-not-supported.patch @@ -0,0 +1,33 @@ +From 8376ac74390af0ad736c88615e128b82a75eebc0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= +Date: Fri, 19 Feb 2021 10:54:23 +0100 +Subject: [PATCH] rpi-eeprom-update: chmod silent (-f) is not supported +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Álvaro Fernández Rojas +--- + rpi-eeprom-update | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/rpi-eeprom-update ++++ b/rpi-eeprom-update +@@ -200,7 +200,7 @@ applyRecoveryUpdate() + || die "Failed to copy ${TMP_EEPROM_IMAGE} to ${BOOTFS}" + + # For NFS mounts ensure that the files are readable to the TFTP user +- chmod -f go+r "${BOOTFS}/pieeprom.upd" "${BOOTFS}/pieeprom.sig" \ ++ chmod go+r "${BOOTFS}/pieeprom.upd" "${BOOTFS}/pieeprom.sig" \ + || die "Failed to set permissions on eeprom update files" + fi + +@@ -211,7 +211,7 @@ applyRecoveryUpdate() + || die "Failed to copy ${VL805_UPDATE_IMAGE} to ${BOOTFS}/vl805.bin" + + # For NFS mounts ensure that the files are readable to the TFTP user +- chmod -f go+r "${BOOTFS}/vl805.bin" "${BOOTFS}/vl805.sig" \ ++ chmod go+r "${BOOTFS}/vl805.bin" "${BOOTFS}/vl805.sig" \ + || die "Failed to set permissions on eeprom update files" + fi + diff --git a/bcm27xx-eeprom/patches/0005-rpi-eeprom-config-change-default-text-editor.patch b/bcm27xx-eeprom/patches/0005-rpi-eeprom-config-change-default-text-editor.patch new file mode 100755 index 000000000..6feb7602c --- /dev/null +++ b/bcm27xx-eeprom/patches/0005-rpi-eeprom-config-change-default-text-editor.patch @@ -0,0 +1,22 @@ +--- a/rpi-eeprom-config ++++ b/rpi-eeprom-config +@@ -166,8 +166,8 @@ def edit_config(eeprom=None): + """ + Implements something like 'git commit' for editing EEPROM configs. + """ +- # Default to nano if $EDITOR is not defined. +- editor = 'nano' ++ # Default to vi if $EDITOR is not defined. ++ editor = 'vi' + if 'EDITOR' in os.environ: + editor = os.environ['EDITOR'] + +@@ -428,7 +428,7 @@ Operating modes: + + To cancel the pending update run 'sudo rpi-eeprom-update -r' + +- The default text editor is nano and may be overridden by setting the 'EDITOR' ++ The default text editor is vi and may be overridden by setting the 'EDITOR' + environment variable and passing '-E' to 'sudo' to preserve the environment. + + 6. Signing the bootloader config file. diff --git a/cryptodev-linux/Makefile b/cryptodev-linux/Makefile new file mode 100755 index 000000000..0c1f63a60 --- /dev/null +++ b/cryptodev-linux/Makefile @@ -0,0 +1,58 @@ +# +# Copyright (C) 2014 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# $Id$ + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/kernel.mk + +PKG_NAME:=cryptodev-linux +PKG_VERSION:=1.12 +PKG_RELEASE:=1 + +PKG_SOURCE_URL:=https://codeload.github.com/$(PKG_NAME)/$(PKG_NAME)/tar.gz/$(PKG_NAME)-$(PKG_VERSION)? +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_HASH:=f51c2254749233b1b1d7ec9445158bd709f124f88e1c650fe2faac83c3a81938 +PKG_LICENSE:=GPL-2.0 +PKG_LICENSE_FILES:=COPYING + +PKG_MAINTAINER:=Ansuel Smith + +PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_NAME)-$(PKG_VERSION) + +include $(INCLUDE_DIR)/package.mk + +define KernelPackage/cryptodev + SUBMENU:=Cryptographic API modules + TITLE:=Driver for cryptographic acceleration + URL:=http://cryptodev-linux.org/ + VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE) + DEPENDS:=+kmod-crypto-authenc +kmod-crypto-hash + FILES:=$(PKG_BUILD_DIR)/cryptodev.$(LINUX_KMOD_SUFFIX) + AUTOLOAD:=$(call AutoLoad,50,cryptodev) + MODPARAMS.cryptodev:=cryptodev_verbosity=-1 +endef + +define KernelPackage/cryptodev/description + This is a driver for that allows to use the Linux kernel supported + hardware ciphers by user-space applications. +endef + +define Build/Configure +endef + +define Build/Compile + $(MAKE) -C $(PKG_BUILD_DIR) \ + $(KERNEL_MAKE_FLAGS) \ + KERNEL_DIR="$(LINUX_DIR)" +endef + +define Build/InstallDev + $(INSTALL_DIR) $(STAGING_DIR)/usr/include/crypto + $(CP) $(PKG_BUILD_DIR)/crypto/cryptodev.h $(STAGING_DIR)/usr/include/crypto/ +endef + +$(eval $(call KernelPackage,cryptodev)) diff --git a/fullconenat/Makefile b/fullconenat/Makefile new file mode 100755 index 000000000..d49155c7e --- /dev/null +++ b/fullconenat/Makefile @@ -0,0 +1,62 @@ +# +# Copyright (C) 2022 Chion Tang +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=fullconenat +PKG_RELEASE:=9 + +PKG_SOURCE_DATE:=2022-02-13 +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/llccd/netfilter-full-cone-nat.git +PKG_SOURCE_VERSION:=108a36cbdca17e68c9e6e7fd5e26156a88f738e8 +PKG_MIRROR_HASH:=00d749235271dee194dcd23c22e6e85207ea90192a62a110b2af0b4e4de1971f + +PKG_LICENSE:=GPL-2.0 +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=Chion Tang + +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/package.mk + +define Package/iptables-mod-fullconenat + SUBMENU:=Firewall + SECTION:=net + CATEGORY:=Network + TITLE:=FULLCONENAT iptables extension + DEPENDS:=+iptables +kmod-ipt-fullconenat +endef + +define Package/iptables-mod-fullconenat/install + $(INSTALL_DIR) $(1)/usr/lib/iptables + $(INSTALL_BIN) $(PKG_BUILD_DIR)/libipt_FULLCONENAT.so $(1)/usr/lib/iptables +endef + +define KernelPackage/ipt-fullconenat + SUBMENU:=Netfilter Extensions + TITLE:=FULLCONENAT netfilter module + DEPENDS:=+kmod-nf-ipt +kmod-nf-nat + KCONFIG:= \ + CONFIG_NF_CONNTRACK_EVENTS=y \ + CONFIG_NF_CONNTRACK_CHAIN_EVENTS=y + FILES:=$(PKG_BUILD_DIR)/xt_FULLCONENAT.ko +endef + +include $(INCLUDE_DIR)/kernel-defaults.mk + +define Build/Compile + +$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + ARCH="$(LINUX_KARCH)" \ + M="$(PKG_BUILD_DIR)" \ + EXTRA_CFLAGS="$(BUILDFLAGS)" \ + modules + $(call Build/Compile/Default) +endef + +$(eval $(call KernelPackage,ipt-fullconenat)) +$(eval $(call BuildPackage,iptables-mod-fullconenat)) diff --git a/fullconenat/patches/001-fix-init-Repeat-definition.patch b/fullconenat/patches/001-fix-init-Repeat-definition.patch new file mode 100755 index 000000000..67c9332c8 --- /dev/null +++ b/fullconenat/patches/001-fix-init-Repeat-definition.patch @@ -0,0 +1,20 @@ +--- a/libip6t_FULLCONENAT.c ++++ b/libip6t_FULLCONENAT.c +@@ -214,6 +214,7 @@ static struct xtables_target fullconenat_tg_reg = { + .x6_options = FULLCONENAT_opts, + }; + ++#define _init __attribute__((constructor)) _INIT + void _init(void) + { + xtables_register_target(&fullconenat_tg_reg); +--- a/libipt_FULLCONENAT.c ++++ b/libipt_FULLCONENAT.c +@@ -235,6 +235,7 @@ static struct xtables_target fullconenat_tg_reg = { + .x6_options = FULLCONENAT_opts, + }; + ++#define _init __attribute__((constructor)) _INIT + void _init(void) + { + xtables_register_target(&fullconenat_tg_reg); diff --git a/fullconenat/patches/001-linux-6.1-support.patch b/fullconenat/patches/001-linux-6.1-support.patch new file mode 100755 index 000000000..41721fb5c --- /dev/null +++ b/fullconenat/patches/001-linux-6.1-support.patch @@ -0,0 +1,26 @@ +--- a/xt_FULLCONENAT.c ++++ b/xt_FULLCONENAT.c +@@ -325,7 +325,11 @@ + /* for now we do the same thing for both --random and --random-fully */ + + /* select a random starting point */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) ++ start = (uint16_t)(get_random_u32() % (u32)range_size); ++#else + start = (uint16_t)(prandom_u32() % (u32)range_size); ++#endif + } else { + + if ((original_port >= min && original_port <= min + range_size - 1) +@@ -995,7 +999,11 @@ + /* for now we do the same thing for both --random and --random-fully */ + + /* select a random starting point */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) ++ start = (uint16_t)(get_random_u32() % (u32)range_size); ++#else + start = (uint16_t)(prandom_u32() % (u32)range_size); ++#endif + } else { + + if ((original_port >= min && original_port <= min + range_size - 1) diff --git a/fullconenat/src/Makefile b/fullconenat/src/Makefile new file mode 100755 index 000000000..b2f88db33 --- /dev/null +++ b/fullconenat/src/Makefile @@ -0,0 +1,6 @@ +libipt_FULLCONENAT.so: libipt_FULLCONENAT.o + $(CC) -shared -lxtables -o $@ $^; +libipt_FULLCONENAT.o: libipt_FULLCONENAT.c + $(CC) ${CFLAGS} -fPIC -D_INIT=$*_init -c -o $@ $<; + +obj-m += xt_FULLCONENAT.o diff --git a/golang/golang/Makefile b/golang/golang/Makefile index 1047d5b6b..1f5ecffcc 100755 --- a/golang/golang/Makefile +++ b/golang/golang/Makefile @@ -37,7 +37,8 @@ PKG_CPE_ID:=cpe:/a:golang:go PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_DIR:=$(BUILD_DIR)/go-$(PKG_VERSION) PKG_BUILD_PARALLEL:=1 -PKG_USE_MIPS16:=0 +#PKG_USE_MIPS16:=0 +PKG_BUILD_FLAGS:=no-mips16 PKG_GO_PREFIX:=/usr PKG_GO_VERSION_ID:=$(GO_VERSION_MAJOR_MINOR) diff --git a/https-dns-proxy/Makefile b/https-dns-proxy/Makefile old mode 100644 new mode 100755 index ce7d70eeb..abfb4be7a --- a/https-dns-proxy/Makefile +++ b/https-dns-proxy/Makefile @@ -1,14 +1,14 @@ include $(TOPDIR)/rules.mk PKG_NAME:=https-dns-proxy -PKG_VERSION:=2023-05-25 -PKG_RELEASE:=2 +PKG_VERSION:=2021-11-22 +PKG_RELEASE:=3 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/aarond10/https_dns_proxy/ -PKG_SOURCE_DATE:=$(PKG_VERSION) -PKG_SOURCE_VERSION:=d03e11572562f008f68df217a7378628f1bb7b79 -PKG_MIRROR_HASH:=5af3683c48bc9e493ca2761a6f7ee756431692a695d6008f61b8b92431036dca +PKG_SOURCE_DATE:=2021-11-22 +PKG_SOURCE_VERSION:=9336fd6272d67e8bb6e304fa54f3139a3d26f08f +PKG_MIRROR_HASH:=60b1ddabaf1db3a9ee19f3294a1df714364d580cef5e3c2161363c371a557456 PKG_MAINTAINER:=Stan Grishin PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE @@ -16,20 +16,20 @@ PKG_LICENSE_FILES:=LICENSE include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk -CMAKE_OPTIONS += -DCLANG_TIDY_EXE= -DGIT_VERSION=$(PKG_VERSION)-$(PKG_RELEASE) +CMAKE_OPTIONS += -DCLANG_TIDY_EXE= define Package/https-dns-proxy SECTION:=net CATEGORY:=Network TITLE:=DNS Over HTTPS Proxy URL:=https://docs.openwrt.melmac.net/https-dns-proxy/ - DEPENDS:=+libcares +libcurl +libev +ca-bundle +jsonfilter + DEPENDS:=+libcares +libcurl +libev +ca-bundle CONFLICTS:=https_dns_proxy endef define Package/https-dns-proxy/description -Light-weight DNS-over-HTTPS, non-caching translation proxy for the RFC 8484 DoH standard. -It receives regular (UDP) DNS requests and resolves them via DoH resolver. +https-dns-proxy is a light-weight DNS<-->HTTPS, non-caching translation proxy for the RFC 8484 DoH standard. +It receives regular (UDP) DNS requests and issues them via DoH. Please see https://docs.openwrt.melmac.net/https-dns-proxy/ for more information. endef @@ -40,14 +40,12 @@ endef define Package/https-dns-proxy/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_DIR) ${1}/etc/config $(INSTALL_DIR) $(1)/etc/hotplug.d/iface - $(INSTALL_DIR) $(1)/etc/uci-defaults/ $(INSTALL_BIN) $(PKG_BUILD_DIR)/https_dns_proxy $(1)/usr/sbin/https-dns-proxy $(INSTALL_BIN) ./files/https-dns-proxy.init $(1)/etc/init.d/https-dns-proxy - $(SED) "s|^\(readonly PKG_VERSION\).*|\1='$(PKG_VERSION)-$(PKG_RELEASE)'|" $(1)/etc/init.d/https-dns-proxy + $(SED) "s|^\(PKG_VERSION\).*|\1='$(PKG_VERSION)-$(PKG_RELEASE)'|" $(1)/etc/init.d/https-dns-proxy $(INSTALL_CONF) ./files/https-dns-proxy.config $(1)/etc/config/https-dns-proxy - $(INSTALL_BIN) ./files/https-dns-proxy.defaults $(1)/etc/uci-defaults/50-https-dns-proxy-migrate-options.sh endef $(eval $(call BuildPackage,https-dns-proxy)) diff --git a/https-dns-proxy/files/README.md b/https-dns-proxy/files/README.md old mode 100644 new mode 100755 diff --git a/https-dns-proxy/files/https-dns-proxy.config b/https-dns-proxy/files/https-dns-proxy.config old mode 100644 new mode 100755 index 39b807b45..f08e03ca9 --- a/https-dns-proxy/files/https-dns-proxy.config +++ b/https-dns-proxy/files/https-dns-proxy.config @@ -1,7 +1,5 @@ config main 'config' - option canary_domains_icloud '1' - option canary_domains_mozilla '1' - option dnsmasq_config_update '*' + option update_dnsmasq_config '*' option force_dns '1' list force_dns_port '53' list force_dns_port '853' @@ -13,13 +11,12 @@ config main 'config' # list force_dns_port '4434' # list force_dns_port '5443' # list force_dns_port '8443' - option procd_trigger_wan6 '0' config https-dns-proxy option bootstrap_dns '1.1.1.1,1.0.0.1' option resolver_url 'https://cloudflare-dns.com/dns-query' option listen_addr '127.0.0.1' - option listen_port '5053' + option listen_port '5054' option user 'nobody' option group 'nogroup' @@ -27,6 +24,6 @@ config https-dns-proxy option bootstrap_dns '8.8.8.8,8.8.4.4' option resolver_url 'https://dns.google/dns-query' option listen_addr '127.0.0.1' - option listen_port '5054' + option listen_port '5053' option user 'nobody' option group 'nogroup' diff --git a/https-dns-proxy/files/https-dns-proxy.defaults b/https-dns-proxy/files/https-dns-proxy.defaults deleted file mode 100644 index 8321ea99b..000000000 --- a/https-dns-proxy/files/https-dns-proxy.defaults +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - sed -i "s|update_dnsmasq_config|dnsmasq_config_update|" "/etc/config/https-dns-proxy" - sed -i "s|wan6_trigger|procd_trigger_wan6|" "/etc/config/https-dns-proxy" diff --git a/https-dns-proxy/files/https-dns-proxy.hotplug.iface b/https-dns-proxy/files/https-dns-proxy.hotplug.iface old mode 100644 new mode 100755 diff --git a/https-dns-proxy/files/https-dns-proxy.init b/https-dns-proxy/files/https-dns-proxy.init index d63dad9c5..ef0ffc7d2 100755 --- a/https-dns-proxy/files/https-dns-proxy.init +++ b/https-dns-proxy/files/https-dns-proxy.init @@ -1,9 +1,10 @@ #!/bin/sh /etc/rc.common -# Copyright 2019-2022 Stan Grishin (stangri@melmac.ca) -# shellcheck disable=SC1091,SC3043,SC3060 +# Copyright 2019-2020 Stan Grishin (stangri@melmac.net) +# shellcheck disable=SC2039,SC3043,SC3060 +PKG_VERSION='dev-test' # shellcheck disable=SC2034 -START=95 +START=80 # shellcheck disable=SC2034 USE_PROCD=1 @@ -14,60 +15,8 @@ else EXTRA_COMMANDS='version' fi -readonly PKG_VERSION='dev-test' -readonly packageName='https-dns-proxy' -readonly serviceName="$packageName $PKG_VERSION" -readonly _OK_='\033[0;32m\xe2\x9c\x93\033[0m' -readonly _FAIL_='\033[0;31m\xe2\x9c\x97\033[0m' readonly PROG=/usr/sbin/https-dns-proxy -readonly BOOTSTRAP_CF='1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001' -readonly BOOTSTRAP_GOOGLE='8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844' -readonly DEFAULT_BOOTSTRAP="${BOOTSTRAP_CF},${BOOTSTRAP_GOOGLE}" -readonly canaryDomainsMozilla='use-application-dns.net' -readonly canaryDomainsiCloud='mask.icloud.com mask-h2.icloud.com' - -str_contains() { [ -n "$1" ] &&[ -n "$2" ] && [ "${1//$2}" != "$1" ]; } -is_mac_address() { expr "$1" : '[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]$' >/dev/null; } -is_ipv4() { expr "$1" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; } -is_ipv6() { ! is_mac_address "$1" && str_contains "$1" ":"; } -output() { - local msg memmsg logmsg - local sharedMemoryOutput="/dev/shm/$packageName-output" - [ -t 1 ] && printf "%b" "$@" - msg="${1//$serviceName /service }"; - if [ "$(printf "%b" "$msg" | wc -l)" -gt 0 ]; then - [ -s "$sharedMemoryOutput" ] && memmsg="$(cat "$sharedMemoryOutput")" - logmsg="$(printf "%b" "${memmsg}${msg}" | sed 's/\x1b\[[0-9;]*m//g')" - logger -t "$packageName" "$(printf "%b" "$logmsg")" - rm -f "$sharedMemoryOutput" - else - printf "%b" "$msg" >> "$sharedMemoryOutput" - fi -} -output_ok() { output "$_OK_"; } -output_okn() { output "${_OK_}\\n"; } -output_fail() { output "$_FAIL_"; } -output_failn() { output "${_FAIL_}\\n"; } -uci_add_list_if_new() { - local PACKAGE="$1" - local CONFIG="$2" - local OPTION="$3" - local VALUE="$4" - local i - [ -n "$PACKAGE" ] && [ -n "$CONFIG" ] && [ -n "$OPTION" ] && [ -n "$VALUE" ] || return 1 - for i in $(uci_get "$PACKAGE" "$CONFIG" "$OPTION"); do - [ "$i" = "$VALUE" ] && return 0 - done - uci_add_list "$PACKAGE" "$CONFIG" "$OPTION" "$VALUE" -} -uci_changes() { - local PACKAGE="$1" - local CONFIG="$2" - local OPTION="$3" - /sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} changes "$PACKAGE${CONFIG:+.$CONFIG}${OPTION:+.$OPTION}" -} - -dnsmasq_restart() { [ -x /etc/init.d/dnsmasq ] || return 0; /etc/init.d/dnsmasq restart >/dev/null 2>&1; } +dnsmasqConfig=''; forceDNS=''; forceDNSPorts=''; version() { echo "$PKG_VERSION"; } @@ -77,10 +26,11 @@ append_bool() { local section="$1" local option="$2" local value="$3" - local default="${4:-0}" + local default="$4" local _loctmp + [ -z "$default" ] && default="0" config_get_bool _loctmp "$section" "$option" "$default" - [ "$_loctmp" -ne 0 ] && xappend "$value" + [ "$_loctmp" != "0" ] && xappend "$value" } append_parm() { @@ -90,280 +40,180 @@ append_parm() { local default="$4" local _loctmp config_get _loctmp "$section" "$option" "$default" - [ -n "$_loctmp" ] && xappend "$switch $_loctmp" -} - -append_counter() { - local section="$1" - local option="$2" - local switch="$3" - local default="${4:-0}" - local _loctmp i - config_get _loctmp "$section" "$option" "$default" -# shellcheck disable=SC2086,SC2154 - for i in $(seq 1 $_loctmp); do - xappend '-v' - done -} - -append_bootstrap() { - local section="$1" - local option="$2" - local switch="$3" - local default="$4" - local _old_ifs="$IFS" - local _loctmp _newtmp i - config_get _loctmp "$section" "$option" "$default" [ -z "$_loctmp" ] && return 0 - IFS=" ," - for i in $_loctmp; do - if { [ "$ipv6_resolvers_only" -eq 0 ] && is_ipv4 "$i"; } || \ - { [ "$ipv6_resolvers_only" -ne 0 ] && is_ipv6 "$i"; }; then - [ -z "$_newtmp" ] && _newtmp="$i" || _newtmp="${_newtmp},${i}" - fi - done - IFS="$_old_ifs" - [ -n "$_newtmp" ] && xappend "$switch $_newtmp" - [ "$ipv6_resolvers_only" -eq 0 ] && xappend '-4' -} - -boot() { - ubus -t 30 wait_for network.interface 2>/dev/null - rc_procd start_service 'on_boot' + xappend "$switch $_loctmp" } start_instance() { - local cfg="$1" param listen_addr listen_port ipv6_resolvers_only p url iface - - config_get url "$cfg" 'resolver_url' - config_get_bool ipv6_resolvers_only "$cfg" 'use_ipv6_resolvers_only' '0' + local cfg="$1" param listen_addr listen_port i append_parm "$cfg" 'resolver_url' '-r' + append_parm "$cfg" 'polling_interval' '-i' append_parm "$cfg" 'listen_addr' '-a' '127.0.0.1' - append_parm "$cfg" 'listen_port' '-p' "$port" + append_parm "$cfg" 'listen_port' '-p' "$p" append_parm "$cfg" 'dscp_codepoint' '-c' - append_bootstrap "$cfg" 'bootstrap_dns' '-b' "$DEFAULT_BOOTSTRAP" + append_parm "$cfg" 'bootstrap_dns' '-b' append_parm "$cfg" 'user' '-u' 'nobody' append_parm "$cfg" 'group' '-g' 'nogroup' - append_parm "$cfg" 'ca_certs_file' '-C' - append_parm "$cfg" 'polling_interval' '-i' append_parm "$cfg" 'proxy_server' '-t' append_parm "$cfg" 'logfile' '-l' append_bool "$cfg" 'use_http1' '-x' - append_counter "$cfg" 'verbosity' '-v' '0' + config_get_bool ipv6_resolvers_only "$cfg" 'use_ipv6_resolvers_only' '0' + config_get verbosity "$cfg" 'verbosity' '0' + +# shellcheck disable=SC2086,SC2154 + for i in $(seq 1 $verbosity); do + xappend '-v' + done +# shellcheck disable=SC2154 + if [ "$ipv6_resolvers_only" = 0 ]; then + xappend '-4' + fi procd_open_instance # shellcheck disable=SC2086 - procd_set_param command $PROG $param + procd_set_param command ${PROG} ${param} procd_set_param stderr 1 procd_set_param stdout 1 procd_set_param respawn - procd_open_data - json_add_object mdns - procd_add_mdns_service "$packageName" 'udp' "$port" "DNS over HTTPS proxy" - json_close_object - json_add_string url "$url" - if [ "$force_dns" -ne 0 ]; then - json_add_array firewall - for iface in $procd_fw_src_interfaces; do - for p in $force_dns_port; do - if netstat -tuln | grep 'LISTEN' | grep ":${p}" >/dev/null 2>&1 || [ "$p" = '53' ]; then - json_add_object '' - json_add_string type redirect - json_add_string target DNAT - json_add_string src "$iface" - json_add_string proto 'tcp udp' - json_add_string src_dport "$p" - json_add_string dest_port "$p" - json_add_string family any - json_add_boolean reflection 0 - json_close_object - else - json_add_object '' - json_add_string type rule - json_add_string src "$iface" - json_add_string dest '*' - json_add_string proto 'tcp udp' - json_add_string dest_port "$p" - json_add_string target REJECT - json_close_object - fi - done - done - json_close_array - fi - procd_close_data procd_close_instance - if [ "$?" ]; then - config_get listen_addr "$cfg" 'listen_addr' '127.0.0.1' - config_get listen_port "$cfg" 'listen_port' "$port" - if [ "$dnsmasq_config_update" = '*' ]; then - config_load 'dhcp' - config_foreach dnsmasq_doh_server 'dnsmasq' 'add' "${listen_addr}" "${listen_port}" - elif [ -n "$dnsmasq_config_update" ]; then - for i in $dnsmasq_config_update; do - if [ -n "$(uci_get 'dhcp' "@dnsmasq[$i]")" ]; then - dnsmasq_doh_server "@dnsmasq[$i]" 'add' "${listen_addr}" "${listen_port}" - elif [ -n "$(uci_get 'dhcp' "$i")" ]; then - dnsmasq_doh_server "${i}" 'add' "${listen_addr}" "${listen_port}" - fi - done - fi - output_ok - port="$((port+1))" - force_dns=0 - else - output_fail + config_get listen_addr "$cfg" 'listen_addr' '127.0.0.1' + config_get listen_port "$cfg" 'listen_port' "$p" + + if [ "$dnsmasqConfig" = "*" ]; then + config_load 'dhcp' + config_foreach dnsmasq_add_doh_server 'dnsmasq' "${listen_addr}" "${listen_port}" + elif [ -n "$dnsmasqConfig" ]; then + for i in $dnsmasqConfig; do + dnsmasq_add_doh_server "@dnsmasq[${i}]" "${listen_addr}" "${listen_port}" + done fi + p="$((p+1))" } -start_service() { - local canaryDomains canary_domains_icloud canary_domains_mozilla - local dnsmasq_config_update force_dns force_dns_port - local procd_fw_src_interfaces +is_force_dns_active() { iptables-save 2>/dev/null | grep -q -w -- '--dport 53'; } - local port=5053 - output "Starting $serviceName " - config_load "$packageName" - config_get_bool canary_domains_icloud 'config' 'canary_domains_icloud' '1' - config_get_bool canary_domains_mozilla 'config' 'canary_domains_mozilla' '1' - config_get_bool force_dns 'config' 'force_dns' '1' - config_get dnsmasq_config_update 'config' 'dnsmasq_config_update' '*' - config_get force_dns_port 'config' 'force_dns_port' '53 853' - config_get procd_fw_src_interfaces 'config' 'procd_fw_src_interfaces' 'lan' - if [ "$canary_domains_icloud" -ne 0 ]; then - canaryDomains="${canaryDomains:+$canaryDomains }${canaryDomainsiCloud}" - fi - if [ "$canary_domains_mozilla" -ne 0 ]; then - canaryDomains="${canaryDomains:+$canaryDomains }${canaryDomainsMozilla}" - fi +start_service() { + local p=5053 c + config_load 'https-dns-proxy' + config_get dnsmasqConfig 'config' 'update_dnsmasq_config' '*' + config_get_bool forceDNS 'config' 'force_dns' '1' + config_get forceDNSPorts 'config' 'force_dns_port' '53 853' dhcp_backup 'create' - config_load "$packageName" - config_foreach start_instance "$packageName" - if [ -n "$(uci_changes dhcp)" ]; then - uci_commit 'dhcp' - dnsmasq_restart + config_load 'https-dns-proxy' + config_foreach start_instance 'https-dns-proxy' + if [ "$forceDNS" -ne 0 ]; then + procd_open_instance 'main' + procd_set_param command /bin/true + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_open_data + json_add_array firewall + for c in $forceDNSPorts; do + if netstat -tuln | grep 'LISTEN' | grep ":${c}" >/dev/null 2>&1 || [ "$c" = "53" ]; then + json_add_object "" + json_add_string type redirect + json_add_string target DNAT + json_add_string src lan + json_add_string proto "tcp udp" + json_add_string src_dport "$c" + json_add_string dest_port "$c" + json_add_boolean reflection 0 + json_close_object + else + json_add_object "" + json_add_string type rule + json_add_string src lan + json_add_string dest "*" + json_add_string proto "tcp udp" + json_add_string dest_port "$c" + json_add_string target REJECT + json_close_object + fi + done + json_close_array + procd_close_data + procd_close_instance + fi + if [ -n "$(uci -q changes dhcp)" ]; then + uci -q commit dhcp + [ -x /etc/init.d/dnsmasq ] && /etc/init.d/dnsmasq restart >/dev/null 2>&1 fi - output "\\n" } stop_service() { - local canaryDomains canary_domains_icloud canary_domains_mozilla - local dnsmasq_config_update - local s=0 - output "Stopping $serviceName " - config_load "$packageName" - config_get dnsmasq_config_update 'config' 'dnsmasq_config_update' '*' - config_get_bool canary_domains_icloud 'config' 'canary_domains_icloud' '1' - config_get_bool canary_domains_mozilla 'config' 'canary_domains_mozilla' '1' - if [ "$canary_domains_icloud" -ne 0 ]; then - canaryDomains="${canaryDomains:+$canaryDomains }${canaryDomainsiCloud}" - fi - if [ "$canary_domains_mozilla" -ne 0 ]; then - canaryDomains="${canaryDomains:+$canaryDomains }${canaryDomainsMozilla}" - fi + config_load 'https-dns-proxy' + config_get dnsmasqConfig 'config' 'update_dnsmasq_config' '*' dhcp_backup 'restore' - if [ -n "$(uci_changes dhcp)" ]; then - uci_commit 'dhcp' - dnsmasq_restart || s=1 + if [ -n "$(uci -q changes dhcp)" ]; then + uci -q commit dhcp + [ -x /etc/init.d/dnsmasq ] && /etc/init.d/dnsmasq restart >/dev/null 2>&1 fi -# shellcheck disable=SC2015 - [ "$s" -eq 0 ] && output_okn || output_failn } -# shellcheck disable=SC1091 service_triggers() { - local wan wan6 i - local procd_trigger_wan6 - config_load "$packageName" - config_get_bool procd_trigger_wan6 'config' 'procd_trigger_wan6' '0' - . /lib/functions/network.sh - network_flush_cache - network_find_wan wan - wan="${wan:-wan}" - if [ "$procd_trigger_wan6" -ne 0 ]; then - network_find_wan6 wan6 - wan6="${wan6:-wan6}" - fi - for i in "$wan" "$wan6"; do - [ -n "$i" ] && procd_add_interface_trigger "interface.*" "$i" "/etc/init.d/${packageName}" restart - done - procd_add_config_trigger "config.change" "$packageName" "/etc/init.d/${packageName}" reload + procd_add_config_trigger "config.change" "https-dns-proxy" /etc/init.d/https-dns-proxy reload } service_started() { procd_set_config_changed firewall; } service_stopped() { procd_set_config_changed firewall; } -restart() { procd_send_signal "$packageName"; rc_procd start_service; } -dnsmasq_doh_server() { - local cfg="$1" param="$2" address="${3:-127.0.0.1}" port="$4" i - case "$param" in - add) - if [ "$force_dns" -ne 0 ]; then - for i in $canaryDomains; do - uci_add_list_if_new 'dhcp' "$cfg" 'server' "/${i}/" - done - fi - case $address in - 0.0.0.0|::ffff:0.0.0.0) address='127.0.0.1';; - ::) address='::1';; - esac - uci_add_list_if_new 'dhcp' "$cfg" 'server' "${address}#${port}" - ;; - remove) - eval "$(ubus call service list "{ 'verbose': true, 'name': '$packageName' }" | jsonfilter -F '# ' -e 'TUPLES=@[*].instances[*].command[4,6]')" - for i in $TUPLES; do - uci_remove_list 'dhcp' "$cfg" 'server' "$i" - done - for i in $canaryDomains; do - uci_remove_list 'dhcp' "$cfg" 'server' "/${i}/" - done - ;; +dnsmasq_add_doh_server() { + local cfg="$1" address="$2" port="$3" + case $address in + 0.0.0.0|::ffff:0.0.0.0) address='127.0.0.1';; + ::) address='::1';; esac + uci -q del_list "dhcp.${cfg}.server=${address}#${port}" + uci -q add_list "dhcp.${cfg}.server=${address}#${port}" } dnsmasq_create_server_backup() { - local cfg="$1" i - [ -n "$(uci_get 'dhcp' "$cfg")" ] || return 1 - if [ -z "$(uci_get 'dhcp' "$cfg" 'doh_backup_noresolv')" ]; then - if [ -z "$(uci_get 'dhcp' "$cfg" 'noresolv')" ]; then - uci_set 'dhcp' "$cfg" 'doh_backup_noresolv' '-1' - else - uci_set 'dhcp' "$cfg" 'doh_backup_noresolv' "$(uci_get 'dhcp' "$cfg" noresolv)" + local cfg="$1" + local i + uci -q get "dhcp.${cfg}" >/dev/null || return 1 + if ! uci -q get "dhcp.${cfg}.doh_backup_noresolv" >/dev/null; then + if [ -z "$(uci -q get "dhcp.${cfg}.noresolv")" ]; then + uci -q set "dhcp.${cfg}.noresolv=1" + uci -q set "dhcp.${cfg}.doh_backup_noresolv=-1" + elif [ "$(uci -q get "dhcp.${cfg}.noresolv")" != "1" ]; then + uci -q set "dhcp.${cfg}.noresolv=1" + uci -q set "dhcp.${cfg}.doh_backup_noresolv=0" fi - uci_set 'dhcp' "$cfg" 'noresolv' 1 fi - if [ -z "$(uci_get 'dhcp' "$cfg" 'doh_backup_server')" ]; then - if [ -z "$(uci_get 'dhcp' "$cfg" 'server')" ]; then - uci_add_list 'dhcp' "$cfg" 'doh_backup_server' "" + if ! uci -q get "dhcp.${cfg}.doh_backup_server" >/dev/null; then + if [ -z "$(uci -q get "dhcp.${cfg}.server")" ]; then + uci -q add_list "dhcp.${cfg}.doh_backup_server=" fi - for i in $(uci_get 'dhcp' "$cfg" 'server'); do - uci_add_list 'dhcp' "$cfg" 'doh_backup_server' "$i" + for i in $(uci -q get "dhcp.${cfg}.server"); do + uci -q add_list "dhcp.${cfg}.doh_backup_server=$i" if [ "$i" = "$(echo "$i" | tr -d /\#)" ]; then - uci_remove_list 'dhcp' "$cfg" 'server' "$i" + uci -q del_list "dhcp.${cfg}.server=$i" fi done + uci -q del_list "dhcp.${cfg}.server=127.0.0.1#5353" fi return 0 } dnsmasq_restore_server_backup() { - local cfg="$1" i - [ -n "$(uci_get 'dhcp' "$cfg")" ] || return 0 - if [ -n "$(uci_get 'dhcp' "$cfg" 'doh_backup_noresolv')" ]; then - if [ "$(uci_get 'dhcp' "$cfg" 'doh_backup_noresolv')" = "-1" ]; then - uci_remove 'dhcp' "$cfg" 'noresolv' - else - uci_set 'dhcp' "$cfg" 'noresolv' "$(uci_get 'dhcp' "$cfg" 'doh_backup_noresolv')" + local cfg="$1" + local i + uci -q get "dhcp.${cfg}" >/dev/null || return 0 + if uci -q get "dhcp.${cfg}.doh_backup_noresolv" >/dev/null; then + if [ "$(uci -q get "dhcp.${cfg}.doh_backup_noresolv")" = "0" ]; then + uci -q set "dhcp.${cfg}.noresolv=0" + else + uci -q del "dhcp.${cfg}.noresolv" fi - uci_remove 'dhcp' "$cfg" 'doh_backup_noresolv' + uci -q del "dhcp.${cfg}.doh_backup_noresolv" fi - if uci_get 'dhcp' "$cfg" 'doh_backup_server' >/dev/null 2>&1; then - dnsmasq_doh_server "$cfg" 'remove' - for i in $(uci_get 'dhcp' "$cfg" 'doh_backup_server'); do - uci_add_list_if_new 'dhcp' "$cfg" 'server' "$i" + if uci -q get "dhcp.${cfg}.doh_backup_server" >/dev/null; then + uci -q del "dhcp.${cfg}.server" + for i in $(uci -q get "dhcp.${cfg}.doh_backup_server"); do + uci -q add_list "dhcp.${cfg}.server=$i" done - uci_remove 'dhcp' "$cfg" 'doh_backup_server' + uci -q del "dhcp.${cfg}.doh_backup_server" fi } @@ -372,15 +222,12 @@ dhcp_backup() { config_load 'dhcp' case "$1" in create) - if [ "$dnsmasq_config_update" = "*" ]; then + if [ "$dnsmasqConfig" = "*" ]; then config_foreach dnsmasq_create_server_backup 'dnsmasq' - elif [ -n "$dnsmasq_config_update" ]; then - for i in $dnsmasq_config_update; do - if [ -n "$(uci_get 'dhcp' "@dnsmasq[$i]")" ]; then - dnsmasq_create_server_backup "@dnsmasq[$i]" - elif [ -n "$(uci_get 'dhcp' "$i")" ]; then + elif [ -n "$dnsmasqConfig" ]; then + for i in $dnsmasqConfig; do + dnsmasq_create_server_backup "@dnsmasq[${i}]" || \ dnsmasq_create_server_backup "$i" - fi done fi ;; diff --git a/https-dns-proxy/patches/010-cmakelists-remove-cflags.patch b/https-dns-proxy/patches/010-fix-cmakelists.patch old mode 100644 new mode 100755 similarity index 56% rename from https-dns-proxy/patches/010-cmakelists-remove-cflags.patch rename to https-dns-proxy/patches/010-fix-cmakelists.patch index cd60c6dc0..106142579 --- a/https-dns-proxy/patches/010-cmakelists-remove-cflags.patch +++ b/https-dns-proxy/patches/010-fix-cmakelists.patch @@ -1,13 +1,13 @@ --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -25,9 +25,9 @@ if (NOT CMAKE_INSTALL_BINDIR) - set(CMAKE_INSTALL_BINDIR bin) +@@ -21,9 +21,9 @@ if(NOT CMAKE_BUILD_TYPE) + message(STATUS "Setting build type to '${CMAKE_BUILD_TYPE}' as none was specified.") endif() --set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra --pedantic -Wno-strict-aliasing -Wno-variadic-macros") +-set(CMAKE_C_FLAGS "-Wall -Wextra --pedantic -Wno-strict-aliasing -Wno-variadic-macros") -set(CMAKE_C_FLAGS_DEBUG "-g -DDEBUG") -set(CMAKE_C_FLAGS_RELEASE "-O2") -+#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra --pedantic -Wno-strict-aliasing -Wno-variadic-macros") ++#set(CMAKE_C_FLAGS "-Wall -Wextra --pedantic -Wno-strict-aliasing -Wno-variadic-macros") +#set(CMAKE_C_FLAGS_DEBUG "-g -DDEBUG") +#set(CMAKE_C_FLAGS_RELEASE "-O2") diff --git a/https-dns-proxy/patches/020-src-options.c-add-version.patch b/https-dns-proxy/patches/020-src-options.c-add-version.patch deleted file mode 100644 index 8bb2d9361..000000000 --- a/https-dns-proxy/patches/020-src-options.c-add-version.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/src/options.c -+++ b/src/options.c -@@ -22,7 +22,7 @@ const char * options_sw_version() { - #ifdef SW_VERSION - return SW_VERSION; - #else -- return "2023.01.01-atLeast"; // update date sometimes, like 1-2 times a year -+ return "2023-05-25-1"; // update date sometimes, like 1-2 times a year - #endif - } - diff --git a/https-dns-proxy/test.sh b/https-dns-proxy/test.sh old mode 100644 new mode 100755 index 443b747a0..45469ed96 --- a/https-dns-proxy/test.sh +++ b/https-dns-proxy/test.sh @@ -1,3 +1,3 @@ #!/bin/sh -/etc/init.d/"$1" version 2>&1 | grep "$2" && "$1" -V 2>&1 | grep "$2" +/etc/init.d/"$1" version 2>&1 | grep "$2" diff --git a/ipcalc/Makefile b/ipcalc/Makefile old mode 100644 new mode 100755 diff --git a/iproute2/Makefile b/iproute2/Makefile old mode 100644 new mode 100755 index 101ca6732..302d57bf8 --- a/iproute2/Makefile +++ b/iproute2/Makefile @@ -8,19 +8,17 @@ include $(TOPDIR)/rules.mk PKG_NAME:=iproute2 -PKG_VERSION:=6.3.0 +PKG_VERSION:=6.2.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2 -PKG_HASH:=dfb2a98db96e7a653cffc6693335a1a466e29a34b6ac528be48f35e1d2766732 +PKG_HASH:=4d72730200ec5b2aabaa1a2f20553c6748292f065d9a154c7d5e22559df9fd62 PKG_BUILD_PARALLEL:=1 PKG_BUILD_DEPENDS:=iptables PKG_LICENSE:=GPL-2.0 PKG_CPE_ID:=cpe:/a:iproute2_project:iproute2 -PKG_BUILD_FLAGS:=gc-sections lto - include $(INCLUDE_DIR)/kernel.mk include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/nls.mk @@ -173,7 +171,8 @@ define Build/Configure > $(PKG_BUILD_DIR)/include/SNAPSHOT.h endef -TARGET_LDFLAGS += -Wl,--as-needed +TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto +TARGET_LDFLAGS += -Wl,--gc-sections -Wl,--as-needed TARGET_CPPFLAGS += -I$(STAGING_DIR)/usr/include/libnl-tiny MAKE_FLAGS += \ diff --git a/iproute2/patches/100-configure.patch b/iproute2/patches/100-configure.patch old mode 100644 new mode 100755 index 2d4fb7b9b..0c19b2086 --- a/iproute2/patches/100-configure.patch +++ b/iproute2/patches/100-configure.patch @@ -1,6 +1,6 @@ --- a/configure +++ b/configure -@@ -36,7 +36,8 @@ int main(int argc, char **argv) { +@@ -34,7 +34,8 @@ int main(int argc, char **argv) { } EOF diff --git a/iproute2/patches/110-darwin_fixes.patch b/iproute2/patches/110-darwin_fixes.patch old mode 100644 new mode 100755 index 06ae59f8b..1f3eb101e --- a/iproute2/patches/110-darwin_fixes.patch +++ b/iproute2/patches/110-darwin_fixes.patch @@ -1,6 +1,6 @@ --- a/netem/maketable.c +++ b/netem/maketable.c -@@ -11,7 +11,9 @@ +@@ -10,7 +10,9 @@ #include #include #include @@ -12,7 +12,7 @@ #include --- a/netem/normal.c +++ b/netem/normal.c -@@ -9,8 +9,12 @@ +@@ -8,8 +8,12 @@ #include #include @@ -27,7 +27,7 @@ #define TABLEFACTOR NETEM_DIST_SCALE --- a/netem/pareto.c +++ b/netem/pareto.c -@@ -8,8 +8,12 @@ +@@ -7,8 +7,12 @@ #include #include @@ -42,7 +42,7 @@ #define TABLESIZE 16384 --- a/netem/paretonormal.c +++ b/netem/paretonormal.c -@@ -15,10 +15,13 @@ +@@ -14,10 +14,13 @@ #include #include #include diff --git a/iproute2/patches/115-add-config-xtlibdir.patch b/iproute2/patches/115-add-config-xtlibdir.patch old mode 100644 new mode 100755 index 03df7809f..8702d5fd2 --- a/iproute2/patches/115-add-config-xtlibdir.patch +++ b/iproute2/patches/115-add-config-xtlibdir.patch @@ -1,6 +1,6 @@ --- a/tc/Makefile +++ b/tc/Makefile -@@ -127,6 +127,9 @@ CFLAGS += -DCONFIG_GACT -DCONFIG_GACT_PR +@@ -128,6 +128,9 @@ CFLAGS += -DCONFIG_GACT -DCONFIG_GACT_PR ifneq ($(IPT_LIB_DIR),) CFLAGS += -DIPT_LIB_DIR=\"$(IPT_LIB_DIR)\" endif diff --git a/iproute2/patches/120-no_arpd_ifstat_rtacct_lnstat.patch b/iproute2/patches/120-no_arpd_ifstat_rtacct_lnstat.patch old mode 100644 new mode 100755 diff --git a/iproute2/patches/130-no_netem_tipc_dcb_man_vdpa.patch b/iproute2/patches/130-no_netem_tipc_dcb_man_vdpa.patch old mode 100644 new mode 100755 diff --git a/iproute2/patches/140-allow_pfifo_fast.patch b/iproute2/patches/140-allow_pfifo_fast.patch old mode 100644 new mode 100755 index 8f5a7d352..13de48f41 --- a/iproute2/patches/140-allow_pfifo_fast.patch +++ b/iproute2/patches/140-allow_pfifo_fast.patch @@ -1,6 +1,6 @@ --- a/tc/q_fifo.c +++ b/tc/q_fifo.c -@@ -90,5 +90,6 @@ struct qdisc_util pfifo_head_drop_qdisc_ +@@ -95,5 +95,6 @@ struct qdisc_util pfifo_head_drop_qdisc_ struct qdisc_util pfifo_fast_qdisc_util = { .id = "pfifo_fast", diff --git a/iproute2/patches/140-keep_libmnl_optional.patch b/iproute2/patches/140-keep_libmnl_optional.patch old mode 100644 new mode 100755 index a8cdd103b..ff7e9ca4e --- a/iproute2/patches/140-keep_libmnl_optional.patch +++ b/iproute2/patches/140-keep_libmnl_optional.patch @@ -1,6 +1,6 @@ --- a/configure +++ b/configure -@@ -411,7 +411,7 @@ check_tirpc() +@@ -387,7 +387,7 @@ check_selinux() check_mnl() { diff --git a/iproute2/patches/145-keep_libelf_optional.patch b/iproute2/patches/145-keep_libelf_optional.patch old mode 100644 new mode 100755 index 0c5c3f59e..079ca0512 --- a/iproute2/patches/145-keep_libelf_optional.patch +++ b/iproute2/patches/145-keep_libelf_optional.patch @@ -1,6 +1,6 @@ --- a/configure +++ b/configure -@@ -266,7 +266,7 @@ EOF +@@ -255,7 +255,7 @@ EOF check_elf() { diff --git a/iproute2/patches/150-keep_libcap_optional.patch b/iproute2/patches/150-keep_libcap_optional.patch old mode 100644 new mode 100755 index 4cce2c3ca..68e162416 --- a/iproute2/patches/150-keep_libcap_optional.patch +++ b/iproute2/patches/150-keep_libcap_optional.patch @@ -1,6 +1,6 @@ --- a/configure +++ b/configure -@@ -469,7 +469,7 @@ EOF +@@ -445,7 +445,7 @@ EOF check_cap() { diff --git a/iproute2/patches/155-keep_tirpc_optional.patch b/iproute2/patches/155-keep_tirpc_optional.patch old mode 100644 new mode 100755 diff --git a/iproute2/patches/160-libnetlink-pic.patch b/iproute2/patches/160-libnetlink-pic.patch old mode 100644 new mode 100755 diff --git a/iproute2/patches/170-ip_tiny.patch b/iproute2/patches/170-ip_tiny.patch old mode 100644 new mode 100755 diff --git a/iproute2/patches/175-reduce-dynamic-syms.patch b/iproute2/patches/175-reduce-dynamic-syms.patch old mode 100644 new mode 100755 index d0914848d..c3892e5a0 --- a/iproute2/patches/175-reduce-dynamic-syms.patch +++ b/iproute2/patches/175-reduce-dynamic-syms.patch @@ -1,6 +1,6 @@ --- a/tc/Makefile +++ b/tc/Makefile -@@ -113,7 +113,7 @@ LDLIBS += -L. -lm +@@ -114,7 +114,7 @@ LDLIBS += -L. -lm ifeq ($(SHARED_LIBS),y) LDLIBS += -ldl @@ -9,7 +9,7 @@ endif TCLIB := tc_core.o -@@ -143,7 +143,7 @@ MODDESTDIR := $(DESTDIR)$(LIBDIR)/tc +@@ -144,7 +144,7 @@ MODDESTDIR := $(DESTDIR)$(LIBDIR)/tc all: tc $(TCSO) tc: $(TCOBJ) $(LIBNETLINK) libtc.a @@ -18,7 +18,7 @@ libtc.a: $(TCLIB) $(QUIET_AR)$(AR) rcs $@ $^ -@@ -165,6 +165,7 @@ install: all +@@ -166,6 +166,7 @@ install: all clean: rm -f $(TCOBJ) $(TCLIB) libtc.a tc *.so emp_ematch.tab.h; \ rm -f emp_ematch.tab.* @@ -26,7 +26,7 @@ q_atm.so: q_atm.c $(QUIET_CC)$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -shared -fpic -o q_atm.so q_atm.c -latm -@@ -204,4 +205,16 @@ static-syms.h: $(wildcard *.c) +@@ -205,4 +206,16 @@ static-syms.h: $(wildcard *.c) sed -n '/'$$s'[^ ]* =/{s:.* \([^ ]*'$$s'[^ ]*\) .*:extern char \1[] __attribute__((weak)); if (!strcmp(sym, "\1")) return \1;:;p}' $$files ; \ done > $@ diff --git a/iproute2/patches/180-drop_FAILED_POLICY.patch b/iproute2/patches/180-drop_FAILED_POLICY.patch old mode 100644 new mode 100755 index 9ce7dd9a1..07d5230a6 --- a/iproute2/patches/180-drop_FAILED_POLICY.patch +++ b/iproute2/patches/180-drop_FAILED_POLICY.patch @@ -11,7 +11,7 @@ Subject: [PATCH] add support for dropping with FAILED_POLICY --- a/ip/rtm_map.c +++ b/ip/rtm_map.c -@@ -49,6 +49,8 @@ char *rtnl_rtntype_n2a(int id, char *buf +@@ -54,6 +54,8 @@ char *rtnl_rtntype_n2a(int id, char *buf return "nat"; case RTN_XRESOLVE: return "xresolve"; @@ -20,7 +20,7 @@ Subject: [PATCH] add support for dropping with FAILED_POLICY default: snprintf(buf, len, "%d", id); return buf; -@@ -84,6 +86,8 @@ int rtnl_rtntype_a2n(int *id, char *arg) +@@ -89,6 +91,8 @@ int rtnl_rtntype_a2n(int *id, char *arg) res = RTN_UNICAST; else if (strcmp(arg, "throw") == 0) res = RTN_THROW; @@ -31,7 +31,7 @@ Subject: [PATCH] add support for dropping with FAILED_POLICY if (!end || end == arg || *end || res > 255) --- a/include/uapi/linux/rtnetlink.h +++ b/include/uapi/linux/rtnetlink.h -@@ -265,6 +265,7 @@ enum { +@@ -256,6 +256,7 @@ enum { RTN_THROW, /* Not in this table */ RTN_NAT, /* Translate this address */ RTN_XRESOLVE, /* Use external resolver */ diff --git a/iproute2/patches/190-fix-nls-rpath-link.patch b/iproute2/patches/190-fix-nls-rpath-link.patch old mode 100644 new mode 100755 index c7fceb2e2..92d02b9a4 --- a/iproute2/patches/190-fix-nls-rpath-link.patch +++ b/iproute2/patches/190-fix-nls-rpath-link.patch @@ -1,6 +1,6 @@ --- a/configure +++ b/configure -@@ -290,7 +290,7 @@ int main(int argc, char **argv) { +@@ -279,7 +279,7 @@ int main(int argc, char **argv) { } EOF @@ -9,7 +9,7 @@ local ret=$? rm -f $TMPDIR/libbpf_test.c $TMPDIR/libbpf_test -@@ -308,7 +308,7 @@ int main(int argc, char **argv) { +@@ -297,7 +297,7 @@ int main(int argc, char **argv) { } EOF diff --git a/iproute2/patches/195-build_variant_ip_tc.patch b/iproute2/patches/195-build_variant_ip_tc.patch old mode 100644 new mode 100755 diff --git a/iproute2/patches/200-drop_libbsd_dependency.patch b/iproute2/patches/200-drop_libbsd_dependency.patch old mode 100644 new mode 100755 index d1948860e..12a1ccfa3 --- a/iproute2/patches/200-drop_libbsd_dependency.patch +++ b/iproute2/patches/200-drop_libbsd_dependency.patch @@ -1,6 +1,6 @@ --- a/configure +++ b/configure -@@ -455,14 +455,8 @@ EOF +@@ -431,14 +431,8 @@ EOF if $CC -I$INCLUDE -o $TMPDIR/strtest $TMPDIR/strtest.c >/dev/null 2>&1; then echo "no" else diff --git a/iproute2/patches/300-selinux-configurable.patch b/iproute2/patches/300-selinux-configurable.patch old mode 100644 new mode 100755 index 817abf7d1..b7e61fd3b --- a/iproute2/patches/300-selinux-configurable.patch +++ b/iproute2/patches/300-selinux-configurable.patch @@ -1,6 +1,6 @@ --- a/configure +++ b/configure -@@ -385,7 +385,7 @@ check_libbpf() +@@ -374,7 +374,7 @@ check_libbpf() check_selinux() # SELinux is a compile time option in the ss utility { diff --git a/lcd4linux/Config.in b/lcd4linux/Config.in new file mode 100755 index 000000000..1410f2b85 --- /dev/null +++ b/lcd4linux/Config.in @@ -0,0 +1,490 @@ +if PACKAGE_lcd4linux-custom + +config LCD4LINUX_CUSTOM_NEEDS_libdbus + bool + +#config LCD4LINUX_CUSTOM_NEEDS_libftdi +# bool + +config LCD4LINUX_CUSTOM_NEEDS_libgd + bool + +config LCD4LINUX_CUSTOM_NEEDS_libiconv + bool + +config LCD4LINUX_CUSTOM_NEEDS_libjpeg + bool + +config LCD4LINUX_CUSTOM_NEEDS_libmpdclient + bool + +config LCD4LINUX_CUSTOM_NEEDS_libmysqlclient + bool + +config LCD4LINUX_CUSTOM_NEEDS_libncurses + bool + +config LCD4LINUX_CUSTOM_NEEDS_libnmeap + bool + +config LCD4LINUX_CUSTOM_NEEDS_libsqlite3 + bool + +config LCD4LINUX_CUSTOM_NEEDS_libusb + bool + +#config LCD4LINUX_CUSTOM_NEEDS_libX11 +# bool + +config LCD4LINUX_CUSTOM_NEEDS_ppp + bool + +config LCD4LINUX_CUSTOM_NEEDS_python + bool + + +comment "Drivers ---" + +config LCD4LINUX_CUSTOM_DRIVER_ASTUSB + bool + prompt "ASTUSB" + +config LCD4LINUX_CUSTOM_DRIVER_BeckmannEgle + bool + prompt "BeckmannEgle" + +config LCD4LINUX_CUSTOM_DRIVER_BWCT + bool + prompt "BWCT" + select LCD4LINUX_CUSTOM_NEEDS_libusb + +config LCD4LINUX_CUSTOM_DRIVER_CrystalFontz + bool + prompt "CrystalFontz" + +config LCD4LINUX_CUSTOM_DRIVER_Curses + bool + prompt "Curses" + select LCD4LINUX_CUSTOM_NEEDS_libncurses + +config LCD4LINUX_CUSTOM_DRIVER_Cwlinux + bool + prompt "Cwlinux" + +config LCD4LINUX_CUSTOM_DRIVER_D4D + bool + prompt "D4D" + select LCD4LINUX_CUSTOM_NEEDS_libgd + +config LCD4LINUX_CUSTOM_DRIVER_dpf + bool + prompt "dpf" + select LCD4LINUX_CUSTOM_NEEDS_libusb + select LCD4LINUX_CUSTOM_NEEDS_libgd + +config LCD4LINUX_CUSTOM_DRIVER_EA232graphic + bool + prompt "EA232graphic" + select LCD4LINUX_CUSTOM_NEEDS_libgd + +config LCD4LINUX_CUSTOM_DRIVER_EFN + bool + prompt "EFN" + +config LCD4LINUX_CUSTOM_DRIVER_FutabaVFD + bool + prompt "FutabaVFD" + +config LCD4LINUX_CUSTOM_DRIVER_FW8888 + bool + prompt "FW8888" + +config LCD4LINUX_CUSTOM_DRIVER_G15 + bool + prompt "G15" + select LCD4LINUX_CUSTOM_NEEDS_libgd + select LCD4LINUX_CUSTOM_NEEDS_libusb + +config LCD4LINUX_CUSTOM_DRIVER_GLCD2USB + bool + prompt "GLCD2USB" + select LCD4LINUX_CUSTOM_NEEDS_libgd + select LCD4LINUX_CUSTOM_NEEDS_libusb + +config LCD4LINUX_CUSTOM_DRIVER_HD44780 + bool + prompt "HD44780" + depends on BROKEN + +config LCD4LINUX_CUSTOM_DRIVER_HD44780-I2C + bool + prompt "HD44780-I2C" + depends on BROKEN + +config LCD4LINUX_CUSTOM_DRIVER_IRLCD + bool + prompt "IRLCD" + select LCD4LINUX_CUSTOM_NEEDS_libusb + +config LCD4LINUX_CUSTOM_DRIVER_LCD2USB + bool + prompt "LCD2USB" + select LCD4LINUX_CUSTOM_NEEDS_libgd + select LCD4LINUX_CUSTOM_NEEDS_libusb + +config LCD4LINUX_CUSTOM_DRIVER_LCDLinux + bool + prompt "LCDLinux" + depends on BROKEN + +config LCD4LINUX_CUSTOM_DRIVER_LCDTerm + bool + prompt "LCDTerm" + +config LCD4LINUX_CUSTOM_DRIVER_LEDMatrix + bool + prompt "LEDMatrix" + select LCD4LINUX_CUSTOM_NEEDS_libgd + +config LCD4LINUX_CUSTOM_DRIVER_LPH7508 + bool + prompt "LPH7508" + select LCD4LINUX_CUSTOM_NEEDS_libgd + +config LCD4LINUX_CUSTOM_DRIVER_LUIse + bool + prompt "LUIse" + select LCD4LINUX_CUSTOM_NEEDS_libgd + #select LCD4LINUX_CUSTOM_NEEDS_libluise + depends on BROKEN + +config LCD4LINUX_CUSTOM_DRIVER_LW_ABP + bool + prompt "LW_ABP" + +config LCD4LINUX_CUSTOM_DRIVER_M50530 + bool + prompt "M50530" + +config LCD4LINUX_CUSTOM_DRIVER_MatrixOrbital + bool + prompt "MatrixOrbital" + +config LCD4LINUX_CUSTOM_DRIVER_MatrixOrbitalGX + bool + prompt "MatrixOrbitalGX" + select LCD4LINUX_CUSTOM_NEEDS_libgd + select LCD4LINUX_CUSTOM_NEEDS_libusb + +config LCD4LINUX_CUSTOM_DRIVER_mdm166a + bool + prompt "mdm166a" + select LCD4LINUX_CUSTOM_NEEDS_libgd + +config LCD4LINUX_CUSTOM_DRIVER_MilfordInstruments + bool + prompt "MilfordInstruments" + +config LCD4LINUX_CUSTOM_DRIVER_Newhaven + bool + prompt "Newhaven" + +config LCD4LINUX_CUSTOM_DRIVER_Noritake + bool + prompt "Noritake" + select LCD4LINUX_CUSTOM_NEEDS_libgd + +config LCD4LINUX_CUSTOM_DRIVER_NULL + bool + prompt "NULL" + default y + +config LCD4LINUX_CUSTOM_DRIVER_Pertelian + bool + prompt "Pertelian" + +config LCD4LINUX_CUSTOM_DRIVER_PHAnderson + bool + prompt "PHAnderson" + +config LCD4LINUX_CUSTOM_DRIVER_PICGraphic + bool + prompt "PICGraphic" + select LCD4LINUX_CUSTOM_NEEDS_libgd + +config LCD4LINUX_CUSTOM_DRIVER_picoLCD + bool + prompt "picoLCD" + select LCD4LINUX_CUSTOM_NEEDS_libusb + +config LCD4LINUX_CUSTOM_DRIVER_picoLCDGraphic + bool + prompt "picoLCDGraphic" + select LCD4LINUX_CUSTOM_NEEDS_libgd + select LCD4LINUX_CUSTOM_NEEDS_libusb + +config LCD4LINUX_CUSTOM_DRIVER_PNG + bool + prompt "PNG" + select LCD4LINUX_CUSTOM_NEEDS_libgd + +config LCD4LINUX_CUSTOM_DRIVER_PPM + bool + prompt "PPM" + select LCD4LINUX_CUSTOM_NEEDS_libgd + +config LCD4LINUX_CUSTOM_DRIVER_RouterBoard + bool + prompt "RouterBoard" + depends on TARGET_rb532 + +config LCD4LINUX_CUSTOM_DRIVER_SamsungSPF + bool + prompt "SamsungSPF" + select LCD4LINUX_CUSTOM_NEEDS_libgd + select LCD4LINUX_CUSTOM_NEEDS_libjpeg + +config LCD4LINUX_CUSTOM_DRIVER_serdisplib + bool + prompt "serdisplib" + select LCD4LINUX_CUSTOM_NEEDS_libgd + select LCD4LINUX_CUSTOM_NEEDS_serdisplib + +config LCD4LINUX_CUSTOM_DRIVER_ShuttleVFD + bool + prompt "ShuttleVFD" + select LCD4LINUX_CUSTOM_NEEDS_libusb + +config LCD4LINUX_CUSTOM_DRIVER_SimpleLCD + bool + prompt "SimpleLCD" + +config LCD4LINUX_CUSTOM_DRIVER_st2205 + bool + prompt "st2205" + select LCD4LINUX_CUSTOM_NEEDS_libgd + select LCD4LINUX_CUSTOM_NEEDS_st2205tool + +config LCD4LINUX_CUSTOM_DRIVER_T6963 + bool + prompt "T6963" + select LCD4LINUX_CUSTOM_NEEDS_libgd + +config LCD4LINUX_CUSTOM_DRIVER_TeakLCM + bool + prompt "TeakLCM" + +config LCD4LINUX_CUSTOM_DRIVER_TEW673GRU + bool + select LCD4LINUX_CUSTOM_NEEDS_libgd + depends on TARGET_ar71xx + default TARGET_ar71xx + +config LCD4LINUX_CUSTOM_DRIVER_Trefon + bool + prompt "Trefon" + select LCD4LINUX_CUSTOM_NEEDS_libusb + +#config LCD4LINUX_CUSTOM_DRIVER_ULA200 +# bool +# prompt "ULA200" +# select LCD4LINUX_CUSTOM_NEEDS_libftdi +# select LCD4LINUX_CUSTOM_NEEDS_libusb + +config LCD4LINUX_CUSTOM_DRIVER_USBHUB + bool + prompt "USBHUB" + select LCD4LINUX_CUSTOM_NEEDS_libusb + +config LCD4LINUX_CUSTOM_DRIVER_USBLCD + bool + prompt "USBLCD" + select LCD4LINUX_CUSTOM_NEEDS_libusb + +config LCD4LINUX_CUSTOM_DRIVER_VNC + bool + prompt "VNC" + select LCD4LINUX_CUSTOM_NEEDS_libgd + select LCD4LINUX_CUSTOM_NEEDS_libvncserver + +config LCD4LINUX_CUSTOM_DRIVER_WincorNixdorf + bool + prompt "WincorNixdorf" + +#config LCD4LINUX_CUSTOM_DRIVER_X11 +# bool +# prompt "X11" +# select LCD4LINUX_CUSTOM_NEEDS_libgd +# select LCD4LINUX_CUSTOM_NEEDS_libX11 + + +comment "Plugins ---" + +config LCD4LINUX_CUSTOM_PLUGIN_apm + bool + prompt "apm" + +config LCD4LINUX_CUSTOM_PLUGIN_asterisk + bool + prompt "asterisk" + +config LCD4LINUX_CUSTOM_PLUGIN_button_exec + bool + prompt "button_exec" + +config LCD4LINUX_CUSTOM_PLUGIN_cpuinfo + bool + prompt "cpuinfo" + default y + +config LCD4LINUX_CUSTOM_PLUGIN_dbus + bool + prompt "dbus" + select LCD4LINUX_CUSTOM_NEEDS_libdbus + +config LCD4LINUX_CUSTOM_PLUGIN_diskstats + bool + prompt "diskstats" + +config LCD4LINUX_CUSTOM_PLUGIN_dvb + bool + prompt "dvb" + +config LCD4LINUX_CUSTOM_PLUGIN_event + bool + prompt "event" + +config LCD4LINUX_CUSTOM_PLUGIN_exec + bool + prompt "exec" + +config LCD4LINUX_CUSTOM_PLUGIN_fifo + bool + prompt "fifo" + +config LCD4LINUX_CUSTOM_PLUGIN_file + bool + prompt "file" + +config LCD4LINUX_CUSTOM_PLUGIN_gps + bool + prompt "gps" + select LCD4LINUX_CUSTOM_NEEDS_libnmeap + +config LCD4LINUX_CUSTOM_PLUGIN_hddtemp + bool + prompt "hddtemp" + +config LCD4LINUX_CUSTOM_PLUGIN_huawei + bool + prompt "huawei" + +config LCD4LINUX_CUSTOM_PLUGIN_i2c_sensors + bool + prompt "i2c_sensors" + +config LCD4LINUX_CUSTOM_PLUGIN_iconv + bool + prompt "iconv" + select LCD4LINUX_CUSTOM_NEEDS_libiconv + +config LCD4LINUX_CUSTOM_PLUGIN_imon + bool + prompt "imon" + +config LCD4LINUX_CUSTOM_PLUGIN_isdn + bool + prompt "isdn" + +config LCD4LINUX_CUSTOM_PLUGIN_kvv + bool + prompt "kvv" + +config LCD4LINUX_CUSTOM_PLUGIN_loadavg + bool + prompt "loadavg" + default y + +config LCD4LINUX_CUSTOM_PLUGIN_meminfo + bool + prompt "meminfo" + default y + +config LCD4LINUX_CUSTOM_PLUGIN_mpd + bool + prompt "mpd" + select LCD4LINUX_CUSTOM_NEEDS_libmpdclient + +config LCD4LINUX_CUSTOM_PLUGIN_mpris_dbus + bool + prompt "mpris_dbus" + select LCD4LINUX_CUSTOM_NEEDS_libdbus + +config LCD4LINUX_CUSTOM_PLUGIN_mysql + bool + prompt "mysql" + select LCD4LINUX_CUSTOM_NEEDS_libmysqlclient + +config LCD4LINUX_CUSTOM_PLUGIN_netdev + bool + prompt "netdev" + +config LCD4LINUX_CUSTOM_PLUGIN_netinfo + bool + prompt "netinfo" + +config LCD4LINUX_CUSTOM_PLUGIN_pop3 + bool + prompt "pop3" + +config LCD4LINUX_CUSTOM_PLUGIN_ppp + bool + prompt "ppp" + select LCD4LINUX_CUSTOM_NEEDS_ppp + +config LCD4LINUX_CUSTOM_PLUGIN_proc_stat + bool + prompt "proc_stat" + default y + +#config LCD4LINUX_CUSTOM_PLUGIN_python +# bool +# prompt "python" +# select LCD4LINUX_CUSTOM_NEEDS_python + +config LCD4LINUX_CUSTOM_PLUGIN_qnaplog + bool + prompt "qnaplog" + select LCD4LINUX_CUSTOM_NEEDS_libsqlite3 + +config LCD4LINUX_CUSTOM_PLUGIN_seti + bool + prompt "seti" + +config LCD4LINUX_CUSTOM_PLUGIN_statfs + bool + prompt "statfs" + +config LCD4LINUX_CUSTOM_PLUGIN_uname + bool + prompt "uname" + +config LCD4LINUX_CUSTOM_PLUGIN_uptime + bool + prompt "uptime" + default y + +config LCD4LINUX_CUSTOM_PLUGIN_w1retap + bool + prompt "w1retap" + +config LCD4LINUX_CUSTOM_PLUGIN_wireless + bool + prompt "wireless" + depends on BROKEN + +config LCD4LINUX_CUSTOM_PLUGIN_xmms + bool + prompt "xmms" + +endif diff --git a/lcd4linux/Makefile b/lcd4linux/Makefile new file mode 100755 index 000000000..3271b359f --- /dev/null +++ b/lcd4linux/Makefile @@ -0,0 +1,306 @@ +# +# Copyright (C) 2007-2015 OpenWrt.org +# Copyright (C) 2019 Ycarus (Yannick Chabanois) +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=lcd4linux +PKG_REV:=f13470faf00e52d1458f2a88d498716240edc272 +PKG_VERSION:=r$(PKG_REV) +PKG_RELEASE:=4 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +#PKG_SOURCE_URL:=https://ssl.bulix.org/svn/lcd4linux/trunk/ +PKG_SOURCE_URL:=https://github.com/redblue-pkt/lcd4linux.git +#PKG_SOURCE_SUBDIR:=lcd4linux-$(PKG_VERSION) +PKG_SOURCE_VERSION:=$(PKG_REV) +PKG_SOURCE_PROTO:=git + +LCD4LINUX_DRIVERS:= \ + ASTUSB \ + BeckmannEgle \ + BWCT \ + CrystalFontz \ + Curses \ + Cwlinux \ + D4D \ + DPF \ + EA232graphic \ + EFN \ + FutabaVFD \ + FW8888 \ + GLCD2USB \ + IRLCD \ + $(if $(CONFIG_BROKEN),HD44780) \ + $(if $(CONFIG_BROKEN),HD44780-I2C) \ + LCD2USB \ + $(if $(CONFIG_BROKEN),LCDLinux) \ + LCDTerm \ + LEDMatrix \ + LPH7508 \ + $(if $(CONFIG_BROKEN),LUIse) \ + LW_ABP \ + M50530 \ + MatrixOrbital \ + MatrixOrbitalGX \ + MilfordInstruments \ + Newhaven \ + Noritake \ + NULL \ + Pertelian \ + PHAnderson \ + PICGraphic \ + picoLCD \ + picoLCDGraphic \ + PNG \ + PPM \ + $(if $(CONFIG_TARGET_rb532),RouterBoard) \ + $(if $(CONFIG_BROKEN),SamsungSPF) \ + ShuttleVFD \ + SimpleLCD \ + st2205 \ + T6963 \ + TeakLCM \ + $(if $(CONFIG_TARGET_ar71xx),TEW673GRU) \ + Trefon \ + USBHUB \ + USBLCD \ + VNC \ + WincorNixdorf \ + serdisplib \ +# G15 \ +# ULA200 \ +# X11 \ + +LCD4LINUX_PLUGINS:= \ + apm \ + asterisk \ + button_exec \ + cpuinfo \ + dbus \ + diskstats \ + dvb \ + event \ + exec \ + fifo \ + file \ + gps \ + hddtemp \ + huawei \ + i2c_sensors \ + iconv \ + imon \ + isdn \ + kvv \ + loadavg \ + netdev \ + netinfo \ + meminfo \ + mpris_dbus \ + netdev \ + pop3 \ + ppp \ + proc_stat \ + qnaplog \ + seti \ + statfs \ + uname \ + uptime \ + w1retap \ + $(if $(CONFIG_BROKEN),wireless) \ + xmms \ +# mpd \ +# mysql \ +# python \ + +PKG_FIXUP:=autoreconf +PKG_INSTALL:=1 + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) + +PKG_BUILD_DEPENDS:= \ +# ppp \ +# libftdi \ +# libX11 \ +# python \ + +PKG_CONFIG_DEPENDS:= \ + $(patsubst %,CONFIG_LCD4LINUX_CUSTOM_DRIVER_%,$(LCD4LINUX_DRIVERS)) \ + $(patsubst %,CONFIG_LCD4LINUX_CUSTOM_PLUGIN_%,$(LCD4LINUX_PLUGINS)) \ + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/nls.mk + +define Package/lcd4linux/Default + SECTION:=utils + CATEGORY:=Utilities + PKG_MAINTAINER:=Jonathan McCrohan + TITLE:=LCD display utility + URL:=http://lcd4linux.bulix.org/ +endef + +define Package/lcd4linux/Default/description + LCD4Linux is a small program that grabs information from the kernel and + some subsystems and displays it on an external liquid crystal display. +endef + + +define Package/lcd4linux-custom +$(call Package/lcd4linux/Default) + DEPENDS:= \ + +LCD4LINUX_CUSTOM_NEEDS_libdbus:libdbus \ + +LCD4LINUX_CUSTOM_NEEDS_libgd:libgd \ + $(if $(ICONV_FULL),+LCD4LINUX_CUSTOM_NEEDS_libiconv:libiconv-full) \ + +LCD4LINUX_CUSTOM_NEEDS_libjpeg:libjpeg \ + +LCD4LINUX_CUSTOM_NEEDS_libncurses:libncurses \ + +LCD4LINUX_CUSTOM_NEEDS_libsqlite3:libsqlite3 \ + +LCD4LINUX_CUSTOM_NEEDS_libusb:libusb-compat \ +# +LCD4LINUX_CUSTOM_NEEDS_libmpdclient:libmpdclient \ +# +LCD4LINUX_CUSTOM_NEEDS_libmysqlclient:libmysqlclient \ +# +LCD4LINUX_CUSTOM_NEEDS_libftdi:libftdi \ +# +LCD4LINUX_CUSTOM_NEEDS_libX11:libX11 \ +# +LCD4LINUX_CUSTOM_NEEDS_python:python + MENU:=1 + PROVIDES:=lcd4linux + VARIANT=custom +endef + +define Package/lcd4linux-custom/config + source "$(SOURCE)/Config.in" +endef + +define Package/lcd4linux-custom/description +$(call Package/lcd4linux/Default/description) + . + This package contains a customized version of LCD4Linux. +endef + + +define Package/lcd4linux-full +$(call Package/lcd4linux/Default) + DEPENDS:= \ + +libdbus \ + +libgd \ + $(if $(ICONV_FULL),+libiconv-full) \ + +libncurses \ + +libsqlite3 \ + +libusb-compat \ + +serdisplib +# +libmpdclient \ +# +libmysqlclient \ +# +libftdi \ +# +libX11 \ +# +python + PROVIDES:=lcd4linux + VARIANT=full +endef + +define Package/lcd4linux-full/description +$(call Package/lcd4linux/Default/description) + . + This package contains a version of LCD4Linux built with all supported + drivers and plugins. +endef + + +CONFIGURE_ARGS+= \ + --disable-rpath \ + +EXTRA_LDFLAGS+= -Wl,-rpath-link,$(STAGING_DIR)/usr/lib + +ifeq ($(BUILD_VARIANT),custom) + + LCD4LINUX_CUSTOM_DRIVERS:= $(strip $(foreach c, $(LCD4LINUX_DRIVERS), \ + $(if $(CONFIG_LCD4LINUX_CUSTOM_DRIVER_$(c)),$(c),) \ + )) + ifeq ($(LCD4LINUX_CUSTOM_DRIVERS),) + LCD4LINUX_CUSTOM_DRIVERS:=Sample + endif + + LCD4LINUX_CUSTOM_PLUGINS:= $(strip $(foreach c, $(LCD4LINUX_PLUGINS), \ + $(if $(CONFIG_LCD4LINUX_CUSTOM_PLUGIN_$(c)),$(c)) \ + )) + ifeq ($(LCD4LINUX_CUSTOM_PLUGINS),) + LCD4LINUX_CUSTOM_PLUGINS:=sample + endif + + CONFIGURE_ARGS+= \ + --with-drivers="$(LCD4LINUX_CUSTOM_DRIVERS)" \ + --with-plugins="$(LCD4LINUX_CUSTOM_PLUGINS)" \ + + ifneq ($(CONFIG_LCD4LINUX_CUSTOM_NEEDS_libiconv),) + CONFIGURE_ARGS+= --with-libiconv-prefix="$(ICONV_PREFIX)" + else + CONFIGURE_ARGS+= --without-libiconv-prefix + endif + + ifneq ($(CONFIG_LCD4LINUX_CUSTOM_NEEDS_libmysqlclient),) + EXTRA_LDFLAGS+= -L$(STAGING_DIR)/usr/lib/mysql + endif + +# ifneq ($(CONFIG_LCD4LINUX_CUSTOM_NEEDS_python),) +# CONFIGURE_ARGS+= --with-python +# else + CONFIGURE_ARGS+= --without-python +# endif + +# ifneq ($(CONFIG_LCD4LINUX_CUSTOM_NEEDS_libX11),) +# CONFIGURE_ARGS+= --with-x +# else + CONFIGURE_ARGS+= --without-x +# endif + +endif + +ifeq ($(BUILD_VARIANT),full) + + LCD4LINUX_FULL_DRIVERS:= $(strip $(foreach c, $(LCD4LINUX_DRIVERS), \ + $(c) \ + )) + + LCD4LINUX_FULL_PLUGINS:= $(strip $(foreach c, $(LCD4LINUX_PLUGINS), \ + $(c) \ + )) + + CONFIGURE_ARGS+= \ + --with-drivers="$(LCD4LINUX_FULL_DRIVERS)" \ + --with-plugins="$(LCD4LINUX_FULL_PLUGINS)" \ + --with-libiconv-prefix="$(ICONV_PREFIX)" \ + --without-python \ + --without-x \ + + EXTRA_LDFLAGS+= -L$(STAGING_DIR)/usr/lib/mysql + +endif + + +define Package/lcd4linux/conffiles +/etc/lcd4linux.conf +endef + +define Package/lcd4linux/install + $(INSTALL_DIR) $(1)/usr/bin + $(CP) $(PKG_INSTALL_DIR)/usr/bin/lcd4linux $(1)/usr/bin/ + $(INSTALL_DIR) $(1)/etc + $(INSTALL_CONF) $(PKG_BUILD_DIR)/lcd4linux.conf.sample $(1)/etc/lcd4linux.conf + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/lcd4linux.init $(1)/etc/init.d/lcd4linux + $(SED) "s|^\(Display 'GLCD2USB'\)|#\1|g" \ + -e "s|^\(Layout 'TestLayer'\)|#\1|g" \ + -e "s|^#\(Display 'Image'\)|\1|g" \ + -e "s|^#\(Layout 'Default'\)|\1|g" \ + $(1)/etc/lcd4linux.conf +endef + +Package/lcd4linux-custom/conffiles = $(Package/lcd4linux/conffiles) +Package/lcd4linux-custom/install = $(Package/lcd4linux/install) + +Package/lcd4linux-full/conffiles = $(Package/lcd4linux/conffiles) +Package/lcd4linux-full/install = $(Package/lcd4linux/install) + +$(eval $(call BuildPackage,lcd4linux-custom)) +$(eval $(call BuildPackage,lcd4linux-full)) diff --git a/lcd4linux/files/lcd4linux.init b/lcd4linux/files/lcd4linux.init new file mode 100755 index 000000000..25033f382 --- /dev/null +++ b/lcd4linux/files/lcd4linux.init @@ -0,0 +1,15 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2007-2015 OpenWrt.org + +START=98 + +SERVICE_USE_PID=1 + +start() { + service_start /usr/bin/lcd4linux -o /tmp/lcd4linux.png -q +} + +stop() { + service_stop /usr/bin/lcd4linux +} + diff --git a/lcd4linux/patches/120-remove-as-needed-linker-option.patch b/lcd4linux/patches/120-remove-as-needed-linker-option.patch new file mode 100755 index 000000000..b5e56fe7b --- /dev/null +++ b/lcd4linux/patches/120-remove-as-needed-linker-option.patch @@ -0,0 +1,11 @@ +--- a/Makefile.am ++++ b/Makefile.am +@@ -18,7 +18,7 @@ ACLOCAL_AMFLAGS=-I m4 + # use this for lots of warnings + #AM_CFLAGS = -D_GNU_SOURCE -std=c99 -m64 -Wall -W -pedantic -Wno-variadic-macros -fno-strict-aliasing + +-lcd4linux_LDFLAGS ="-Wl,--as-needed" ++lcd4linux_LDFLAGS = + lcd4linux_LDADD = @DRIVERS@ @PLUGINS@ @DRVLIBS@ @PLUGINLIBS@ + lcd4linux_DEPENDENCIES = @DRIVERS@ @PLUGINS@ + diff --git a/lcd4linux/patches/140-no_repnop_T6963.patch b/lcd4linux/patches/140-no_repnop_T6963.patch new file mode 100755 index 000000000..85be2c376 --- /dev/null +++ b/lcd4linux/patches/140-no_repnop_T6963.patch @@ -0,0 +1,22 @@ +--- a/drv_T6963.c ++++ b/drv_T6963.c +@@ -114,7 +114,9 @@ static void drv_T6_status1(void) + /* wait for STA0=1 and STA1=1 */ + n = 0; + do { ++#if 0 + rep_nop(); ++#endif + if (++n > 1000) { + debug("hang in status1"); + bug = 1; +@@ -150,7 +152,9 @@ static void drv_T6_status2(void) + /* wait for STA3=1 */ + n = 0; + do { ++#if 0 + rep_nop(); ++#endif + if (++n > 1000) { + debug("hang in status2"); + bug = 1; diff --git a/lcd4linux/patches/150-addlibmpdclient.patch b/lcd4linux/patches/150-addlibmpdclient.patch new file mode 100755 index 000000000..0e51f6760 --- /dev/null +++ b/lcd4linux/patches/150-addlibmpdclient.patch @@ -0,0 +1,2624 @@ +--- /dev/null ++++ b/libmpdclient.c +@@ -0,0 +1,1957 @@ ++/* libmpdclient ++ (c)2003-2006 by Warren Dukes (warren.dukes@gmail.com) ++ This project's homepage is: http://www.musicpd.org ++ ++ Redistribution and use in source and binary forms, with or without ++ modification, are permitted provided that the following conditions ++ are met: ++ ++ - Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ ++ - Redistributions in binary form must reproduce the above copyright ++ notice, this list of conditions and the following disclaimer in the ++ documentation and/or other materials provided with the distribution. ++ ++ - Neither the name of the Music Player Daemon nor the names of its ++ contributors may be used to endorse or promote products derived from ++ this software without specific prior written permission. ++ ++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR ++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++*/ ++ ++#include "libmpdclient.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef WIN32 ++# include ++# include ++#else ++# include ++# include ++# include ++# include ++#endif ++ ++/* (bits+1)/3 (plus the sign character) */ ++#define INTLEN ((sizeof(int) * CHAR_BIT + 1) / 3 + 1) ++#define LONGLONGLEN ((sizeof(long long) * CHAR_BIT + 1) / 3 + 1) ++ ++#define COMMAND_LIST 1 ++#define COMMAND_LIST_OK 2 ++ ++#ifndef MPD_NO_GAI ++# ifdef AI_ADDRCONFIG ++# define MPD_HAVE_GAI ++# endif ++#endif ++ ++#ifndef MSG_DONTWAIT ++# define MSG_DONTWAIT 0 ++#endif ++ ++#ifdef WIN32 ++# define SELECT_ERRNO_IGNORE (errno == WSAEINTR || errno == WSAEINPROGRESS) ++# define SENDRECV_ERRNO_IGNORE SELECT_ERRNO_IGNORE ++#else ++# define SELECT_ERRNO_IGNORE (errno == EINTR) ++# define SENDRECV_ERRNO_IGNORE (errno == EINTR || errno == EAGAIN) ++# define winsock_dll_error(c) 0 ++# define closesocket(s) close(s) ++# define WSACleanup() do { /* nothing */ } while (0) ++#endif ++ ++#ifdef WIN32 ++static int winsock_dll_error(mpd_Connection * connection) ++{ ++ WSADATA wsaData; ++ if ((WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0 || LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) { ++ strcpy(connection->errorStr, "Could not find usable WinSock DLL."); ++ connection->error = MPD_ERROR_SYSTEM; ++ return 1; ++ } ++ return 0; ++} ++ ++static int do_connect_fail(mpd_Connection * connection, const struct sockaddr *serv_addr, int addrlen) ++{ ++ int iMode = 1; /* 0 = blocking, else non-blocking */ ++ ioctlsocket(connection->sock, FIONBIO, (u_long FAR *) & iMode); ++ return (connect(connection->sock, serv_addr, addrlen) == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK); ++} ++#else /* !WIN32 (sane operating systems) */ ++static int do_connect_fail(mpd_Connection * connection, const struct sockaddr *serv_addr, int addrlen) ++{ ++ int flags = fcntl(connection->sock, F_GETFL, 0); ++ fcntl(connection->sock, F_SETFL, flags | O_NONBLOCK); ++ return (connect(connection->sock, serv_addr, addrlen) < 0 && errno != EINPROGRESS); ++} ++#endif /* !WIN32 */ ++ ++#ifdef MPD_HAVE_GAI ++static int mpd_connect(mpd_Connection * connection, const char *host, int port, float timeout) ++{ ++ int error; ++ char service[INTLEN + 1]; ++ struct addrinfo hints; ++ struct addrinfo *res = NULL; ++ struct addrinfo *addrinfo = NULL; ++ ++ /** ++ * Setup hints ++ */ ++ hints.ai_flags = AI_ADDRCONFIG; ++ hints.ai_family = PF_UNSPEC; ++ hints.ai_socktype = SOCK_STREAM; ++ hints.ai_protocol = IPPROTO_TCP; ++ hints.ai_addrlen = 0; ++ hints.ai_addr = NULL; ++ hints.ai_canonname = NULL; ++ hints.ai_next = NULL; ++ ++ snprintf(service, sizeof(service), "%i", port); ++ ++ error = getaddrinfo(host, service, &hints, &addrinfo); ++ ++ if (error) { ++ snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH, "host \"%s\" not found: %s", host, gai_strerror(error)); ++ connection->error = MPD_ERROR_UNKHOST; ++ return -1; ++ } ++ ++ for (res = addrinfo; res; res = res->ai_next) { ++ /* create socket */ ++ connection->sock = socket(res->ai_family, SOCK_STREAM, res->ai_protocol); ++ if (connection->sock < 0) { ++ snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH, "problems creating socket: %s", strerror(errno)); ++ connection->error = MPD_ERROR_SYSTEM; ++ freeaddrinfo(addrinfo); ++ return -1; ++ } ++ ++ mpd_setConnectionTimeout(connection, timeout); ++ ++ /* connect stuff */ ++ if (do_connect_fail(connection, res->ai_addr, res->ai_addrlen)) { ++ /* try the next address family */ ++ closesocket(connection->sock); ++ connection->sock = -1; ++ continue; ++ } ++ } ++ ++ freeaddrinfo(addrinfo); ++ ++ if (connection->sock < 0) { ++ snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH, ++ "problems connecting to \"%s\" on port %i: %s", host, port, strerror(errno)); ++ connection->error = MPD_ERROR_CONNPORT; ++ ++ return -1; ++ } ++ ++ return 0; ++} ++#else /* !MPD_HAVE_GAI */ ++static int mpd_connect(mpd_Connection * connection, const char *host, int port, float timeout) ++{ ++ struct hostent *he; ++ struct sockaddr *dest; ++ int destlen; ++ struct sockaddr_in sin; ++ ++ if (!(he = gethostbyname(host))) { ++ snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH, "host \"%s\" not found", host); ++ connection->error = MPD_ERROR_UNKHOST; ++ return -1; ++ } ++ ++ memset(&sin, 0, sizeof(struct sockaddr_in)); ++ /*dest.sin_family = he->h_addrtype; */ ++ sin.sin_family = AF_INET; ++ sin.sin_port = htons(port); ++ ++ switch (he->h_addrtype) { ++ case AF_INET: ++ memcpy((char *) &sin.sin_addr.s_addr, (char *) he->h_addr, he->h_length); ++ dest = (struct sockaddr *) &sin; ++ destlen = sizeof(struct sockaddr_in); ++ break; ++ default: ++ strcpy(connection->errorStr, "address type is not IPv4"); ++ connection->error = MPD_ERROR_SYSTEM; ++ return -1; ++ break; ++ } ++ ++ if ((connection->sock = socket(dest->sa_family, SOCK_STREAM, 0)) < 0) { ++ strcpy(connection->errorStr, "problems creating socket"); ++ connection->error = MPD_ERROR_SYSTEM; ++ return -1; ++ } ++ ++ mpd_setConnectionTimeout(connection, timeout); ++ ++ /* connect stuff */ ++ if (do_connect_fail(connection, dest, destlen)) { ++ snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH, ++ "problems connecting to \"%s\" on port" " %i", host, port); ++ connection->error = MPD_ERROR_CONNPORT; ++ return -1; ++ } ++ ++ return 0; ++} ++#endif /* !MPD_HAVE_GAI */ ++ ++char *mpdTagItemKeys[MPD_TAG_NUM_OF_ITEM_TYPES] = { ++ "Artist", ++ "Album", ++ "Title", ++ "Track", ++ "Name", ++ "Genre", ++ "Date", ++ "Composer", ++ "Performer", ++ "Comment", ++ "Disc", ++ "Filename", ++ "Any" ++}; ++ ++static char *mpd_sanitizeArg(const char *arg) ++{ ++ size_t i; ++ char *ret; ++ register const char *c; ++ register char *rc; ++ ++ /* instead of counting in that loop above, just ++ * use a bit more memory and half running time ++ */ ++ ret = malloc(strlen(arg) * 2 + 1); ++ ++ c = arg; ++ rc = ret; ++ for (i = strlen(arg) + 1; i != 0; --i) { ++ if (*c == '"' || *c == '\\') ++ *rc++ = '\\'; ++ *(rc++) = *(c++); ++ } ++ ++ return ret; ++} ++ ++static mpd_ReturnElement *mpd_newReturnElement(const char *name, const char *value) ++{ ++ mpd_ReturnElement *ret = malloc(sizeof(mpd_ReturnElement)); ++ ++ ret->name = strdup(name); ++ ret->value = strdup(value); ++ ++ return ret; ++} ++ ++static void mpd_freeReturnElement(mpd_ReturnElement * re) ++{ ++ free(re->name); ++ free(re->value); ++ free(re); ++} ++ ++void mpd_setConnectionTimeout(mpd_Connection * connection, float timeout) ++{ ++ connection->timeout.tv_sec = (int) timeout; ++ connection->timeout.tv_usec = (int) (timeout * 1e6 - connection->timeout.tv_sec * 1000000 + 0.5); ++} ++ ++static int mpd_parseWelcome(mpd_Connection * connection, const char *host, int port, char *rt, char *output) ++{ ++ char *tmp; ++ char *test; ++ int i; ++ ++ if (strncmp(output, MPD_WELCOME_MESSAGE, strlen(MPD_WELCOME_MESSAGE))) { ++ snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH, ++ "mpd not running on port %i on host \"%s\"", port, host); ++ connection->error = MPD_ERROR_NOTMPD; ++ return 1; ++ } ++ ++ tmp = &output[strlen(MPD_WELCOME_MESSAGE)]; ++ ++ for (i = 0; i < 3; i++) { ++ if (tmp) ++ connection->version[i] = strtol(tmp, &test, 10); ++ ++ if (!tmp || (test[0] != '.' && test[0] != '\0')) { ++ snprintf(connection->errorStr, ++ MPD_ERRORSTR_MAX_LENGTH, ++ "error parsing version number at " "\"%s\"", &output[strlen(MPD_WELCOME_MESSAGE)]); ++ connection->error = MPD_ERROR_NOTMPD; ++ return 1; ++ } ++ tmp = ++test; ++ } ++ ++ return 0; ++} ++ ++mpd_Connection *mpd_newConnection(const char *host, int port, float timeout) ++{ ++ int err; ++ char *rt; ++ char *output = NULL; ++ mpd_Connection *connection = malloc(sizeof(mpd_Connection)); ++ struct timeval tv; ++ fd_set fds; ++ strcpy(connection->buffer, ""); ++ connection->buflen = 0; ++ connection->bufstart = 0; ++ strcpy(connection->errorStr, ""); ++ connection->error = 0; ++ connection->doneProcessing = 0; ++ connection->commandList = 0; ++ connection->listOks = 0; ++ connection->doneListOk = 0; ++ connection->returnElement = NULL; ++ connection->request = NULL; ++ ++ if (winsock_dll_error(connection)) ++ return connection; ++ ++ if (mpd_connect(connection, host, port, timeout) < 0) ++ return connection; ++ ++ while (!(rt = strstr(connection->buffer, "\n"))) { ++ tv.tv_sec = connection->timeout.tv_sec; ++ tv.tv_usec = connection->timeout.tv_usec; ++ FD_ZERO(&fds); ++ FD_SET(connection->sock, &fds); ++ if ((err = select(connection->sock + 1, &fds, NULL, NULL, &tv)) == 1) { ++ int readed; ++ readed = recv(connection->sock, ++ &(connection->buffer[connection->buflen]), MPD_BUFFER_MAX_LENGTH - connection->buflen, 0); ++ if (readed <= 0) { ++ snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH, ++ "problems getting a response from" " \"%s\" on port %i : %s", host, port, strerror(errno)); ++ connection->error = MPD_ERROR_NORESPONSE; ++ return connection; ++ } ++ connection->buflen += readed; ++ connection->buffer[connection->buflen] = '\0'; ++ } else if (err < 0) { ++ if (SELECT_ERRNO_IGNORE) ++ continue; ++ snprintf(connection->errorStr, ++ MPD_ERRORSTR_MAX_LENGTH, "problems connecting to \"%s\" on port" " %i", host, port); ++ connection->error = MPD_ERROR_CONNPORT; ++ return connection; ++ } else { ++ snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH, ++ "timeout in attempting to get a response from" " \"%s\" on port %i", host, port); ++ connection->error = MPD_ERROR_NORESPONSE; ++ return connection; ++ } ++ } ++ ++ *rt = '\0'; ++ output = strdup(connection->buffer); ++ strcpy(connection->buffer, rt + 1); ++ connection->buflen = strlen(connection->buffer); ++ ++ if (mpd_parseWelcome(connection, host, port, rt, output) == 0) ++ connection->doneProcessing = 1; ++ ++ free(output); ++ ++ return connection; ++} ++ ++void mpd_clearError(mpd_Connection * connection) ++{ ++ connection->error = 0; ++ connection->errorStr[0] = '\0'; ++} ++ ++void mpd_closeConnection(mpd_Connection * connection) ++{ ++ closesocket(connection->sock); ++ if (connection->returnElement) ++ free(connection->returnElement); ++ if (connection->request) ++ free(connection->request); ++ free(connection); ++ WSACleanup(); ++} ++ ++static void mpd_executeCommand(mpd_Connection * connection, char *command) ++{ ++ int ret; ++ struct timeval tv; ++ fd_set fds; ++ char *commandPtr = command; ++ int commandLen = strlen(command); ++ ++ if (!connection->doneProcessing && !connection->commandList) { ++ strcpy(connection->errorStr, "not done processing current command"); ++ connection->error = 1; ++ return; ++ } ++ ++ mpd_clearError(connection); ++ ++ FD_ZERO(&fds); ++ FD_SET(connection->sock, &fds); ++ tv.tv_sec = connection->timeout.tv_sec; ++ tv.tv_usec = connection->timeout.tv_usec; ++ ++ while ((ret = select(connection->sock + 1, NULL, &fds, NULL, &tv) == 1) || (ret == -1 && SELECT_ERRNO_IGNORE)) { ++ ret = send(connection->sock, commandPtr, commandLen, MSG_DONTWAIT); ++ if (ret <= 0) { ++ if (SENDRECV_ERRNO_IGNORE) ++ continue; ++ snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH, "problems giving command \"%s\"", command); ++ connection->error = MPD_ERROR_SENDING; ++ return; ++ } else { ++ commandPtr += ret; ++ commandLen -= ret; ++ } ++ ++ if (commandLen <= 0) ++ break; ++ } ++ ++ if (commandLen > 0) { ++ perror(""); ++ snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH, "timeout sending command \"%s\"", command); ++ connection->error = MPD_ERROR_TIMEOUT; ++ return; ++ } ++ ++ if (!connection->commandList) ++ connection->doneProcessing = 0; ++ else if (connection->commandList == COMMAND_LIST_OK) { ++ connection->listOks++; ++ } ++} ++ ++static void mpd_getNextReturnElement(mpd_Connection * connection) ++{ ++ char *output = NULL; ++ char *rt = NULL; ++ char *name = NULL; ++ char *value = NULL; ++ fd_set fds; ++ struct timeval tv; ++ char *tok = NULL; ++ int readed; ++ char *bufferCheck = NULL; ++ int err; ++ int pos; ++ ++ if (connection->returnElement) ++ mpd_freeReturnElement(connection->returnElement); ++ connection->returnElement = NULL; ++ ++ if (connection->doneProcessing || (connection->listOks && connection->doneListOk)) { ++ strcpy(connection->errorStr, "already done processing current command"); ++ connection->error = 1; ++ return; ++ } ++ ++ bufferCheck = connection->buffer + connection->bufstart; ++ while (connection->bufstart >= connection->buflen || !(rt = strchr(bufferCheck, '\n'))) { ++ if (connection->buflen >= MPD_BUFFER_MAX_LENGTH) { ++ memmove(connection->buffer, ++ connection->buffer + connection->bufstart, connection->buflen - connection->bufstart + 1); ++ connection->buflen -= connection->bufstart; ++ connection->bufstart = 0; ++ } ++ if (connection->buflen >= MPD_BUFFER_MAX_LENGTH) { ++ strcpy(connection->errorStr, "buffer overrun"); ++ connection->error = MPD_ERROR_BUFFEROVERRUN; ++ connection->doneProcessing = 1; ++ connection->doneListOk = 0; ++ return; ++ } ++ bufferCheck = connection->buffer + connection->buflen; ++ tv.tv_sec = connection->timeout.tv_sec; ++ tv.tv_usec = connection->timeout.tv_usec; ++ FD_ZERO(&fds); ++ FD_SET(connection->sock, &fds); ++ if ((err = select(connection->sock + 1, &fds, NULL, NULL, &tv) == 1)) { ++ readed = recv(connection->sock, ++ connection->buffer + connection->buflen, ++ MPD_BUFFER_MAX_LENGTH - connection->buflen, MSG_DONTWAIT); ++ if (readed < 0 && SENDRECV_ERRNO_IGNORE) { ++ continue; ++ } ++ if (readed <= 0) { ++ strcpy(connection->errorStr, "connection" " closed"); ++ connection->error = MPD_ERROR_CONNCLOSED; ++ connection->doneProcessing = 1; ++ connection->doneListOk = 0; ++ return; ++ } ++ connection->buflen += readed; ++ connection->buffer[connection->buflen] = '\0'; ++ } else if (err < 0 && SELECT_ERRNO_IGNORE) ++ continue; ++ else { ++ strcpy(connection->errorStr, "connection timeout"); ++ connection->error = MPD_ERROR_TIMEOUT; ++ connection->doneProcessing = 1; ++ connection->doneListOk = 0; ++ return; ++ } ++ } ++ ++ *rt = '\0'; ++ output = connection->buffer + connection->bufstart; ++ connection->bufstart = rt - connection->buffer + 1; ++ ++ if (strcmp(output, "OK") == 0) { ++ if (connection->listOks > 0) { ++ strcpy(connection->errorStr, "expected more list_OK's"); ++ connection->error = 1; ++ } ++ connection->listOks = 0; ++ connection->doneProcessing = 1; ++ connection->doneListOk = 0; ++ return; ++ } ++ ++ if (strcmp(output, "list_OK") == 0) { ++ if (!connection->listOks) { ++ strcpy(connection->errorStr, "got an unexpected list_OK"); ++ connection->error = 1; ++ } else { ++ connection->doneListOk = 1; ++ connection->listOks--; ++ } ++ return; ++ } ++ ++ if (strncmp(output, "ACK", strlen("ACK")) == 0) { ++ char *test; ++ char *needle; ++ int val; ++ ++ strcpy(connection->errorStr, output); ++ connection->error = MPD_ERROR_ACK; ++ connection->errorCode = MPD_ACK_ERROR_UNK; ++ connection->errorAt = MPD_ERROR_AT_UNK; ++ connection->doneProcessing = 1; ++ connection->doneListOk = 0; ++ ++ needle = strchr(output, '['); ++ if (!needle) ++ return; ++ val = strtol(needle + 1, &test, 10); ++ if (*test != '@') ++ return; ++ connection->errorCode = val; ++ val = strtol(test + 1, &test, 10); ++ if (*test != ']') ++ return; ++ connection->errorAt = val; ++ return; ++ } ++ ++ tok = strchr(output, ':'); ++ if (!tok) ++ return; ++ pos = tok - output; ++ value = ++tok; ++ name = output; ++ name[pos] = '\0'; ++ ++ if (value[0] == ' ') { ++ connection->returnElement = mpd_newReturnElement(name, &(value[1])); ++ } else { ++ snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH, "error parsing: %s:%s", name, value); ++ connection->error = 1; ++ } ++} ++ ++void mpd_finishCommand(mpd_Connection * connection) ++{ ++ while (!connection->doneProcessing) { ++ if (connection->doneListOk) ++ connection->doneListOk = 0; ++ mpd_getNextReturnElement(connection); ++ } ++} ++ ++static void mpd_finishListOkCommand(mpd_Connection * connection) ++{ ++ while (!connection->doneProcessing && connection->listOks && !connection->doneListOk) { ++ mpd_getNextReturnElement(connection); ++ } ++} ++ ++int mpd_nextListOkCommand(mpd_Connection * connection) ++{ ++ mpd_finishListOkCommand(connection); ++ if (!connection->doneProcessing) ++ connection->doneListOk = 0; ++ if (connection->listOks == 0 || connection->doneProcessing) ++ return -1; ++ return 0; ++} ++ ++void mpd_sendStatusCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "status\n"); ++} ++ ++mpd_Status *mpd_getStatus(mpd_Connection * connection) ++{ ++ mpd_Status *status; ++ ++ /*mpd_executeCommand(connection,"status\n"); ++ ++ if(connection->error) return NULL; */ ++ ++ if (connection->doneProcessing || (connection->listOks && connection->doneListOk)) { ++ return NULL; ++ } ++ ++ if (!connection->returnElement) ++ mpd_getNextReturnElement(connection); ++ ++ status = malloc(sizeof(mpd_Status)); ++ status->volume = -1; ++ status->repeat = 0; ++ status->random = 0; ++ status->playlist = -1; ++ status->playlistLength = -1; ++ status->state = -1; ++ status->song = 0; ++ status->songid = 0; ++ status->elapsedTime = 0; ++ status->totalTime = 0; ++ status->bitRate = 0; ++ status->sampleRate = 0; ++ status->bits = 0; ++ status->channels = 0; ++ status->crossfade = -1; ++ status->error = NULL; ++ status->updatingDb = 0; ++ ++ if (connection->error) { ++ free(status); ++ return NULL; ++ } ++ while (connection->returnElement) { ++ mpd_ReturnElement *re = connection->returnElement; ++ if (strcmp(re->name, "volume") == 0) { ++ status->volume = atoi(re->value); ++ } else if (strcmp(re->name, "repeat") == 0) { ++ status->repeat = atoi(re->value); ++ } else if (strcmp(re->name, "random") == 0) { ++ status->random = atoi(re->value); ++ } else if (strcmp(re->name, "playlist") == 0) { ++ status->playlist = strtol(re->value, NULL, 10); ++ } else if (strcmp(re->name, "playlistlength") == 0) { ++ status->playlistLength = atoi(re->value); ++ } else if (strcmp(re->name, "bitrate") == 0) { ++ status->bitRate = atoi(re->value); ++ } else if (strcmp(re->name, "state") == 0) { ++ if (strcmp(re->value, "play") == 0) { ++ status->state = MPD_STATUS_STATE_PLAY; ++ } else if (strcmp(re->value, "stop") == 0) { ++ status->state = MPD_STATUS_STATE_STOP; ++ } else if (strcmp(re->value, "pause") == 0) { ++ status->state = MPD_STATUS_STATE_PAUSE; ++ } else { ++ status->state = MPD_STATUS_STATE_UNKNOWN; ++ } ++ } else if (strcmp(re->name, "song") == 0) { ++ status->song = atoi(re->value); ++ } else if (strcmp(re->name, "songid") == 0) { ++ status->songid = atoi(re->value); ++ } else if (strcmp(re->name, "time") == 0) { ++ char *tok = strchr(re->value, ':'); ++ /* the second strchr below is a safety check */ ++ if (tok && (strchr(tok, 0) > (tok + 1))) { ++ /* atoi stops at the first non-[0-9] char: */ ++ status->elapsedTime = atoi(re->value); ++ status->totalTime = atoi(tok + 1); ++ } ++ } else if (strcmp(re->name, "error") == 0) { ++ status->error = strdup(re->value); ++ } else if (strcmp(re->name, "xfade") == 0) { ++ status->crossfade = atoi(re->value); ++ } else if (strcmp(re->name, "updating_db") == 0) { ++ status->updatingDb = atoi(re->value); ++ } else if (strcmp(re->name, "audio") == 0) { ++ char *tok = strchr(re->value, ':'); ++ if (tok && (strchr(tok, 0) > (tok + 1))) { ++ status->sampleRate = atoi(re->value); ++ status->bits = atoi(++tok); ++ tok = strchr(tok, ':'); ++ if (tok && (strchr(tok, 0) > (tok + 1))) ++ status->channels = atoi(tok + 1); ++ } ++ } ++ ++ mpd_getNextReturnElement(connection); ++ if (connection->error) { ++ free(status); ++ return NULL; ++ } ++ } ++ ++ if (connection->error) { ++ free(status); ++ return NULL; ++ } else if (status->state < 0) { ++ strcpy(connection->errorStr, "state not found"); ++ connection->error = 1; ++ free(status); ++ return NULL; ++ } ++ ++ return status; ++} ++ ++void mpd_freeStatus(mpd_Status * status) ++{ ++ if (status->error) ++ free(status->error); ++ free(status); ++} ++ ++void mpd_sendStatsCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "stats\n"); ++} ++ ++mpd_Stats *mpd_getStats(mpd_Connection * connection) ++{ ++ mpd_Stats *stats; ++ ++ /*mpd_executeCommand(connection,"stats\n"); ++ ++ if(connection->error) return NULL; */ ++ ++ if (connection->doneProcessing || (connection->listOks && connection->doneListOk)) { ++ return NULL; ++ } ++ ++ if (!connection->returnElement) ++ mpd_getNextReturnElement(connection); ++ ++ stats = malloc(sizeof(mpd_Stats)); ++ stats->numberOfArtists = 0; ++ stats->numberOfAlbums = 0; ++ stats->numberOfSongs = 0; ++ stats->uptime = 0; ++ stats->dbUpdateTime = 0; ++ stats->playTime = 0; ++ stats->dbPlayTime = 0; ++ ++ if (connection->error) { ++ free(stats); ++ return NULL; ++ } ++ while (connection->returnElement) { ++ mpd_ReturnElement *re = connection->returnElement; ++ if (strcmp(re->name, "artists") == 0) { ++ stats->numberOfArtists = atoi(re->value); ++ } else if (strcmp(re->name, "albums") == 0) { ++ stats->numberOfAlbums = atoi(re->value); ++ } else if (strcmp(re->name, "songs") == 0) { ++ stats->numberOfSongs = atoi(re->value); ++ } else if (strcmp(re->name, "uptime") == 0) { ++ stats->uptime = strtol(re->value, NULL, 10); ++ } else if (strcmp(re->name, "db_update") == 0) { ++ stats->dbUpdateTime = strtol(re->value, NULL, 10); ++ } else if (strcmp(re->name, "playtime") == 0) { ++ stats->playTime = strtol(re->value, NULL, 10); ++ } else if (strcmp(re->name, "db_playtime") == 0) { ++ stats->dbPlayTime = strtol(re->value, NULL, 10); ++ } ++ ++ mpd_getNextReturnElement(connection); ++ if (connection->error) { ++ free(stats); ++ return NULL; ++ } ++ } ++ ++ if (connection->error) { ++ free(stats); ++ return NULL; ++ } ++ ++ return stats; ++} ++ ++void mpd_freeStats(mpd_Stats * stats) ++{ ++ free(stats); ++} ++ ++mpd_SearchStats *mpd_getSearchStats(mpd_Connection * connection) ++{ ++ mpd_SearchStats *stats; ++ mpd_ReturnElement *re; ++ ++ if (connection->doneProcessing || (connection->listOks && connection->doneListOk)) { ++ return NULL; ++ } ++ ++ if (!connection->returnElement) ++ mpd_getNextReturnElement(connection); ++ ++ if (connection->error) ++ return NULL; ++ ++ stats = malloc(sizeof(mpd_SearchStats)); ++ stats->numberOfSongs = 0; ++ stats->playTime = 0; ++ ++ while (connection->returnElement) { ++ re = connection->returnElement; ++ ++ if (strcmp(re->name, "songs") == 0) { ++ stats->numberOfSongs = atoi(re->value); ++ } else if (strcmp(re->name, "playtime") == 0) { ++ stats->playTime = strtol(re->value, NULL, 10); ++ } ++ ++ mpd_getNextReturnElement(connection); ++ if (connection->error) { ++ free(stats); ++ return NULL; ++ } ++ } ++ ++ if (connection->error) { ++ free(stats); ++ return NULL; ++ } ++ ++ return stats; ++} ++ ++void mpd_freeSearchStats(mpd_SearchStats * stats) ++{ ++ free(stats); ++} ++ ++static void mpd_initSong(mpd_Song * song) ++{ ++ song->file = NULL; ++ song->artist = NULL; ++ song->album = NULL; ++ song->track = NULL; ++ song->title = NULL; ++ song->name = NULL; ++ song->date = NULL; ++ /* added by Qball */ ++ song->genre = NULL; ++ song->composer = NULL; ++ song->performer = NULL; ++ song->disc = NULL; ++ song->comment = NULL; ++ ++ song->time = MPD_SONG_NO_TIME; ++ song->pos = MPD_SONG_NO_NUM; ++ song->id = MPD_SONG_NO_ID; ++} ++ ++static void mpd_finishSong(mpd_Song * song) ++{ ++ if (song->file) ++ free(song->file); ++ if (song->artist) ++ free(song->artist); ++ if (song->album) ++ free(song->album); ++ if (song->title) ++ free(song->title); ++ if (song->track) ++ free(song->track); ++ if (song->name) ++ free(song->name); ++ if (song->date) ++ free(song->date); ++ if (song->genre) ++ free(song->genre); ++ if (song->composer) ++ free(song->composer); ++ if (song->disc) ++ free(song->disc); ++ if (song->comment) ++ free(song->comment); ++} ++ ++mpd_Song *mpd_newSong(void) ++{ ++ mpd_Song *ret = malloc(sizeof(mpd_Song)); ++ ++ mpd_initSong(ret); ++ ++ return ret; ++} ++ ++void mpd_freeSong(mpd_Song * song) ++{ ++ mpd_finishSong(song); ++ free(song); ++} ++ ++mpd_Song *mpd_songDup(mpd_Song * song) ++{ ++ mpd_Song *ret = mpd_newSong(); ++ ++ if (song->file) ++ ret->file = strdup(song->file); ++ if (song->artist) ++ ret->artist = strdup(song->artist); ++ if (song->album) ++ ret->album = strdup(song->album); ++ if (song->title) ++ ret->title = strdup(song->title); ++ if (song->track) ++ ret->track = strdup(song->track); ++ if (song->name) ++ ret->name = strdup(song->name); ++ if (song->date) ++ ret->date = strdup(song->date); ++ if (song->genre) ++ ret->genre = strdup(song->genre); ++ if (song->composer) ++ ret->composer = strdup(song->composer); ++ if (song->disc) ++ ret->disc = strdup(song->disc); ++ if (song->comment) ++ ret->comment = strdup(song->comment); ++ ret->time = song->time; ++ ret->pos = song->pos; ++ ret->id = song->id; ++ ++ return ret; ++} ++ ++static void mpd_initDirectory(mpd_Directory * directory) ++{ ++ directory->path = NULL; ++} ++ ++static void mpd_finishDirectory(mpd_Directory * directory) ++{ ++ if (directory->path) ++ free(directory->path); ++} ++ ++mpd_Directory *mpd_newDirectory(void) ++{ ++ mpd_Directory *directory = malloc(sizeof(mpd_Directory));; ++ ++ mpd_initDirectory(directory); ++ ++ return directory; ++} ++ ++void mpd_freeDirectory(mpd_Directory * directory) ++{ ++ mpd_finishDirectory(directory); ++ ++ free(directory); ++} ++ ++mpd_Directory *mpd_directoryDup(mpd_Directory * directory) ++{ ++ mpd_Directory *ret = mpd_newDirectory(); ++ ++ if (directory->path) ++ ret->path = strdup(directory->path); ++ ++ return ret; ++} ++ ++static void mpd_initPlaylistFile(mpd_PlaylistFile * playlist) ++{ ++ playlist->path = NULL; ++} ++ ++static void mpd_finishPlaylistFile(mpd_PlaylistFile * playlist) ++{ ++ if (playlist->path) ++ free(playlist->path); ++} ++ ++mpd_PlaylistFile *mpd_newPlaylistFile(void) ++{ ++ mpd_PlaylistFile *playlist = malloc(sizeof(mpd_PlaylistFile)); ++ ++ mpd_initPlaylistFile(playlist); ++ ++ return playlist; ++} ++ ++void mpd_freePlaylistFile(mpd_PlaylistFile * playlist) ++{ ++ mpd_finishPlaylistFile(playlist); ++ free(playlist); ++} ++ ++mpd_PlaylistFile *mpd_playlistFileDup(mpd_PlaylistFile * playlist) ++{ ++ mpd_PlaylistFile *ret = mpd_newPlaylistFile(); ++ ++ if (playlist->path) ++ ret->path = strdup(playlist->path); ++ ++ return ret; ++} ++ ++static void mpd_initInfoEntity(mpd_InfoEntity * entity) ++{ ++ entity->info.directory = NULL; ++} ++ ++static void mpd_finishInfoEntity(mpd_InfoEntity * entity) ++{ ++ if (entity->info.directory) { ++ if (entity->type == MPD_INFO_ENTITY_TYPE_DIRECTORY) { ++ mpd_freeDirectory(entity->info.directory); ++ } else if (entity->type == MPD_INFO_ENTITY_TYPE_SONG) { ++ mpd_freeSong(entity->info.song); ++ } else if (entity->type == MPD_INFO_ENTITY_TYPE_PLAYLISTFILE) { ++ mpd_freePlaylistFile(entity->info.playlistFile); ++ } ++ } ++} ++ ++mpd_InfoEntity *mpd_newInfoEntity(void) ++{ ++ mpd_InfoEntity *entity = malloc(sizeof(mpd_InfoEntity)); ++ ++ mpd_initInfoEntity(entity); ++ ++ return entity; ++} ++ ++void mpd_freeInfoEntity(mpd_InfoEntity * entity) ++{ ++ mpd_finishInfoEntity(entity); ++ free(entity); ++} ++ ++static void mpd_sendInfoCommand(mpd_Connection * connection, char *command) ++{ ++ mpd_executeCommand(connection, command); ++} ++ ++mpd_InfoEntity *mpd_getNextInfoEntity(mpd_Connection * connection) ++{ ++ mpd_InfoEntity *entity = NULL; ++ ++ if (connection->doneProcessing || (connection->listOks && connection->doneListOk)) { ++ return NULL; ++ } ++ ++ if (!connection->returnElement) ++ mpd_getNextReturnElement(connection); ++ ++ if (connection->returnElement) { ++ if (strcmp(connection->returnElement->name, "file") == 0) { ++ entity = mpd_newInfoEntity(); ++ entity->type = MPD_INFO_ENTITY_TYPE_SONG; ++ entity->info.song = mpd_newSong(); ++ entity->info.song->file = strdup(connection->returnElement->value); ++ } else if (strcmp(connection->returnElement->name, "directory") == 0) { ++ entity = mpd_newInfoEntity(); ++ entity->type = MPD_INFO_ENTITY_TYPE_DIRECTORY; ++ entity->info.directory = mpd_newDirectory(); ++ entity->info.directory->path = strdup(connection->returnElement->value); ++ } else if (strcmp(connection->returnElement->name, "playlist") == 0) { ++ entity = mpd_newInfoEntity(); ++ entity->type = MPD_INFO_ENTITY_TYPE_PLAYLISTFILE; ++ entity->info.playlistFile = mpd_newPlaylistFile(); ++ entity->info.playlistFile->path = strdup(connection->returnElement->value); ++ } else if (strcmp(connection->returnElement->name, "cpos") == 0) { ++ entity = mpd_newInfoEntity(); ++ entity->type = MPD_INFO_ENTITY_TYPE_SONG; ++ entity->info.song = mpd_newSong(); ++ entity->info.song->pos = atoi(connection->returnElement->value); ++ } else { ++ connection->error = 1; ++ strcpy(connection->errorStr, "problem parsing song info"); ++ return NULL; ++ } ++ } else ++ return NULL; ++ ++ mpd_getNextReturnElement(connection); ++ while (connection->returnElement) { ++ mpd_ReturnElement *re = connection->returnElement; ++ ++ if (strcmp(re->name, "file") == 0) ++ return entity; ++ else if (strcmp(re->name, "directory") == 0) ++ return entity; ++ else if (strcmp(re->name, "playlist") == 0) ++ return entity; ++ else if (strcmp(re->name, "cpos") == 0) ++ return entity; ++ ++ if (entity->type == MPD_INFO_ENTITY_TYPE_SONG && strlen(re->value)) { ++ if (!entity->info.song->artist && strcmp(re->name, "Artist") == 0) { ++ entity->info.song->artist = strdup(re->value); ++ } else if (!entity->info.song->album && strcmp(re->name, "Album") == 0) { ++ entity->info.song->album = strdup(re->value); ++ } else if (!entity->info.song->title && strcmp(re->name, "Title") == 0) { ++ entity->info.song->title = strdup(re->value); ++ } else if (!entity->info.song->track && strcmp(re->name, "Track") == 0) { ++ entity->info.song->track = strdup(re->value); ++ } else if (!entity->info.song->name && strcmp(re->name, "Name") == 0) { ++ entity->info.song->name = strdup(re->value); ++ } else if (entity->info.song->time == MPD_SONG_NO_TIME && strcmp(re->name, "Time") == 0) { ++ entity->info.song->time = atoi(re->value); ++ } else if (entity->info.song->pos == MPD_SONG_NO_NUM && strcmp(re->name, "Pos") == 0) { ++ entity->info.song->pos = atoi(re->value); ++ } else if (entity->info.song->id == MPD_SONG_NO_ID && strcmp(re->name, "Id") == 0) { ++ entity->info.song->id = atoi(re->value); ++ } else if (!entity->info.song->date && strcmp(re->name, "Date") == 0) { ++ entity->info.song->date = strdup(re->value); ++ } else if (!entity->info.song->genre && strcmp(re->name, "Genre") == 0) { ++ entity->info.song->genre = strdup(re->value); ++ } else if (!entity->info.song->composer && strcmp(re->name, "Composer") == 0) { ++ entity->info.song->composer = strdup(re->value); ++ } else if (!entity->info.song->performer && strcmp(re->name, "Performer") == 0) { ++ entity->info.song->performer = strdup(re->value); ++ } else if (!entity->info.song->disc && strcmp(re->name, "Disc") == 0) { ++ entity->info.song->disc = strdup(re->value); ++ } else if (!entity->info.song->comment && strcmp(re->name, "Comment") == 0) { ++ entity->info.song->comment = strdup(re->value); ++ } ++ } else if (entity->type == MPD_INFO_ENTITY_TYPE_DIRECTORY) { ++ } else if (entity->type == MPD_INFO_ENTITY_TYPE_PLAYLISTFILE) { ++ } ++ ++ mpd_getNextReturnElement(connection); ++ } ++ ++ return entity; ++} ++ ++static char *mpd_getNextReturnElementNamed(mpd_Connection * connection, const char *name) ++{ ++ if (connection->doneProcessing || (connection->listOks && connection->doneListOk)) { ++ return NULL; ++ } ++ ++ mpd_getNextReturnElement(connection); ++ while (connection->returnElement) { ++ mpd_ReturnElement *re = connection->returnElement; ++ ++ if (strcmp(re->name, name) == 0) ++ return strdup(re->value); ++ mpd_getNextReturnElement(connection); ++ } ++ ++ return NULL; ++} ++ ++char *mpd_getNextTag(mpd_Connection * connection, int type) ++{ ++ if (type < 0 || type >= MPD_TAG_NUM_OF_ITEM_TYPES || type == MPD_TAG_ITEM_ANY) ++ return NULL; ++ if (type == MPD_TAG_ITEM_FILENAME) ++ return mpd_getNextReturnElementNamed(connection, "file"); ++ return mpd_getNextReturnElementNamed(connection, mpdTagItemKeys[type]); ++} ++ ++char *mpd_getNextArtist(mpd_Connection * connection) ++{ ++ return mpd_getNextReturnElementNamed(connection, "Artist"); ++} ++ ++char *mpd_getNextAlbum(mpd_Connection * connection) ++{ ++ return mpd_getNextReturnElementNamed(connection, "Album"); ++} ++ ++void mpd_sendPlaylistInfoCommand(mpd_Connection * connection, int songPos) ++{ ++ int len = strlen("playlistinfo") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "playlistinfo \"%i\"\n", songPos); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendPlaylistIdCommand(mpd_Connection * connection, int id) ++{ ++ int len = strlen("playlistid") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "playlistid \"%i\"\n", id); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendPlChangesCommand(mpd_Connection * connection, long long playlist) ++{ ++ int len = strlen("plchanges") + 2 + LONGLONGLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "plchanges \"%lld\"\n", playlist); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendPlChangesPosIdCommand(mpd_Connection * connection, long long playlist) ++{ ++ int len = strlen("plchangesposid") + 2 + LONGLONGLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "plchangesposid \"%lld\"\n", playlist); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendListallCommand(mpd_Connection * connection, const char *dir) ++{ ++ char *sDir = mpd_sanitizeArg(dir); ++ int len = strlen("listall") + 2 + strlen(sDir) + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "listall \"%s\"\n", sDir); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++ free(sDir); ++} ++ ++void mpd_sendListallInfoCommand(mpd_Connection * connection, const char *dir) ++{ ++ char *sDir = mpd_sanitizeArg(dir); ++ int len = strlen("listallinfo") + 2 + strlen(sDir) + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "listallinfo \"%s\"\n", sDir); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++ free(sDir); ++} ++ ++void mpd_sendLsInfoCommand(mpd_Connection * connection, const char *dir) ++{ ++ char *sDir = mpd_sanitizeArg(dir); ++ int len = strlen("lsinfo") + 2 + strlen(sDir) + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "lsinfo \"%s\"\n", sDir); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++ free(sDir); ++} ++ ++void mpd_sendCurrentSongCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "currentsong\n"); ++} ++ ++void mpd_sendSearchCommand(mpd_Connection * connection, int table, const char *str) ++{ ++ mpd_startSearch(connection, 0); ++ mpd_addConstraintSearch(connection, table, str); ++ mpd_commitSearch(connection); ++} ++ ++void mpd_sendFindCommand(mpd_Connection * connection, int table, const char *str) ++{ ++ mpd_startSearch(connection, 1); ++ mpd_addConstraintSearch(connection, table, str); ++ mpd_commitSearch(connection); ++} ++ ++void mpd_sendListCommand(mpd_Connection * connection, int table, const char *arg1) ++{ ++ char st[10]; ++ int len; ++ char *string; ++ if (table == MPD_TABLE_ARTIST) ++ strcpy(st, "artist"); ++ else if (table == MPD_TABLE_ALBUM) ++ strcpy(st, "album"); ++ else { ++ connection->error = 1; ++ strcpy(connection->errorStr, "unknown table for list"); ++ return; ++ } ++ if (arg1) { ++ char *sanitArg1 = mpd_sanitizeArg(arg1); ++ len = strlen("list") + 1 + strlen(sanitArg1) + 2 + strlen(st) + 3; ++ string = malloc(len); ++ snprintf(string, len, "list %s \"%s\"\n", st, sanitArg1); ++ free(sanitArg1); ++ } else { ++ len = strlen("list") + 1 + strlen(st) + 2; ++ string = malloc(len); ++ snprintf(string, len, "list %s\n", st); ++ } ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendAddCommand(mpd_Connection * connection, const char *file) ++{ ++ char *sFile = mpd_sanitizeArg(file); ++ int len = strlen("add") + 2 + strlen(sFile) + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "add \"%s\"\n", sFile); ++ mpd_executeCommand(connection, string); ++ free(string); ++ free(sFile); ++} ++ ++int mpd_sendAddIdCommand(mpd_Connection * connection, const char *file) ++{ ++ int retval = -1; ++ char *sFile = mpd_sanitizeArg(file); ++ int len = strlen("addid") + 2 + strlen(sFile) + 3; ++ char *string = malloc(len); ++ ++ snprintf(string, len, "addid \"%s\"\n", sFile); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++ free(sFile); ++ ++ string = mpd_getNextReturnElementNamed(connection, "Id"); ++ if (string) { ++ retval = atoi(string); ++ free(string); ++ } ++ ++ return retval; ++} ++ ++void mpd_sendDeleteCommand(mpd_Connection * connection, int songPos) ++{ ++ int len = strlen("delete") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "delete \"%i\"\n", songPos); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendDeleteIdCommand(mpd_Connection * connection, int id) ++{ ++ int len = strlen("deleteid") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "deleteid \"%i\"\n", id); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendSaveCommand(mpd_Connection * connection, const char *name) ++{ ++ char *sName = mpd_sanitizeArg(name); ++ int len = strlen("save") + 2 + strlen(sName) + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "save \"%s\"\n", sName); ++ mpd_executeCommand(connection, string); ++ free(string); ++ free(sName); ++} ++ ++void mpd_sendLoadCommand(mpd_Connection * connection, const char *name) ++{ ++ char *sName = mpd_sanitizeArg(name); ++ int len = strlen("load") + 2 + strlen(sName) + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "load \"%s\"\n", sName); ++ mpd_executeCommand(connection, string); ++ free(string); ++ free(sName); ++} ++ ++void mpd_sendRmCommand(mpd_Connection * connection, const char *name) ++{ ++ char *sName = mpd_sanitizeArg(name); ++ int len = strlen("rm") + 2 + strlen(sName) + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "rm \"%s\"\n", sName); ++ mpd_executeCommand(connection, string); ++ free(string); ++ free(sName); ++} ++ ++void mpd_sendRenameCommand(mpd_Connection * connection, const char *from, const char *to) ++{ ++ char *sFrom = mpd_sanitizeArg(from); ++ char *sTo = mpd_sanitizeArg(to); ++ int len = strlen("rename") + 2 + strlen(sFrom) + 3 + strlen(sTo) + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "rename \"%s\" \"%s\"\n", sFrom, sTo); ++ mpd_executeCommand(connection, string); ++ free(string); ++ free(sFrom); ++ free(sTo); ++} ++ ++void mpd_sendShuffleCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "shuffle\n"); ++} ++ ++void mpd_sendClearCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "clear\n"); ++} ++ ++void mpd_sendPlayCommand(mpd_Connection * connection, int songPos) ++{ ++ int len = strlen("play") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "play \"%i\"\n", songPos); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendPlayIdCommand(mpd_Connection * connection, int id) ++{ ++ int len = strlen("playid") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "playid \"%i\"\n", id); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendStopCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "stop\n"); ++} ++ ++void mpd_sendPauseCommand(mpd_Connection * connection, int pauseMode) ++{ ++ int len = strlen("pause") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "pause \"%i\"\n", pauseMode); ++ mpd_executeCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendNextCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "next\n"); ++} ++ ++void mpd_sendMoveCommand(mpd_Connection * connection, int from, int to) ++{ ++ int len = strlen("move") + 2 + INTLEN + 3 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "move \"%i\" \"%i\"\n", from, to); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendMoveIdCommand(mpd_Connection * connection, int id, int to) ++{ ++ int len = strlen("moveid") + 2 + INTLEN + 3 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "moveid \"%i\" \"%i\"\n", id, to); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendSwapCommand(mpd_Connection * connection, int song1, int song2) ++{ ++ int len = strlen("swap") + 2 + INTLEN + 3 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "swap \"%i\" \"%i\"\n", song1, song2); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendSwapIdCommand(mpd_Connection * connection, int id1, int id2) ++{ ++ int len = strlen("swapid") + 2 + INTLEN + 3 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "swapid \"%i\" \"%i\"\n", id1, id2); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendSeekCommand(mpd_Connection * connection, int song, int time) ++{ ++ int len = strlen("seek") + 2 + INTLEN + 3 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "seek \"%i\" \"%i\"\n", song, time); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendSeekIdCommand(mpd_Connection * connection, int id, int time) ++{ ++ int len = strlen("seekid") + 2 + INTLEN + 3 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "seekid \"%i\" \"%i\"\n", id, time); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendUpdateCommand(mpd_Connection * connection, char *path) ++{ ++ char *sPath = mpd_sanitizeArg(path); ++ int len = strlen("update") + 2 + strlen(sPath) + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "update \"%s\"\n", sPath); ++ mpd_sendInfoCommand(connection, string); ++ free(string); ++ free(sPath); ++} ++ ++int mpd_getUpdateId(mpd_Connection * connection) ++{ ++ char *jobid; ++ int ret = 0; ++ ++ jobid = mpd_getNextReturnElementNamed(connection, "updating_db"); ++ if (jobid) { ++ ret = atoi(jobid); ++ free(jobid); ++ } ++ ++ return ret; ++} ++ ++void mpd_sendPrevCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "previous\n"); ++} ++ ++void mpd_sendRepeatCommand(mpd_Connection * connection, int repeatMode) ++{ ++ int len = strlen("repeat") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "repeat \"%i\"\n", repeatMode); ++ mpd_executeCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendRandomCommand(mpd_Connection * connection, int randomMode) ++{ ++ int len = strlen("random") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "random \"%i\"\n", randomMode); ++ mpd_executeCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendSetvolCommand(mpd_Connection * connection, int volumeChange) ++{ ++ int len = strlen("setvol") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "setvol \"%i\"\n", volumeChange); ++ mpd_executeCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendVolumeCommand(mpd_Connection * connection, int volumeChange) ++{ ++ int len = strlen("volume") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "volume \"%i\"\n", volumeChange); ++ mpd_executeCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendCrossfadeCommand(mpd_Connection * connection, int seconds) ++{ ++ int len = strlen("crossfade") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "crossfade \"%i\"\n", seconds); ++ mpd_executeCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendPasswordCommand(mpd_Connection * connection, const char *pass) ++{ ++ char *sPass = mpd_sanitizeArg(pass); ++ int len = strlen("password") + 2 + strlen(sPass) + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "password \"%s\"\n", sPass); ++ mpd_executeCommand(connection, string); ++ free(string); ++ free(sPass); ++} ++ ++void mpd_sendCommandListBegin(mpd_Connection * connection) ++{ ++ if (connection->commandList) { ++ strcpy(connection->errorStr, "already in command list mode"); ++ connection->error = 1; ++ return; ++ } ++ connection->commandList = COMMAND_LIST; ++ mpd_executeCommand(connection, "command_list_begin\n"); ++} ++ ++void mpd_sendCommandListOkBegin(mpd_Connection * connection) ++{ ++ if (connection->commandList) { ++ strcpy(connection->errorStr, "already in command list mode"); ++ connection->error = 1; ++ return; ++ } ++ connection->commandList = COMMAND_LIST_OK; ++ mpd_executeCommand(connection, "command_list_ok_begin\n"); ++ connection->listOks = 0; ++} ++ ++void mpd_sendCommandListEnd(mpd_Connection * connection) ++{ ++ if (!connection->commandList) { ++ strcpy(connection->errorStr, "not in command list mode"); ++ connection->error = 1; ++ return; ++ } ++ connection->commandList = 0; ++ mpd_executeCommand(connection, "command_list_end\n"); ++} ++ ++void mpd_sendOutputsCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "outputs\n"); ++} ++ ++mpd_OutputEntity *mpd_getNextOutput(mpd_Connection * connection) ++{ ++ mpd_OutputEntity *output = NULL; ++ ++ if (connection->doneProcessing || (connection->listOks && connection->doneListOk)) { ++ return NULL; ++ } ++ ++ if (connection->error) ++ return NULL; ++ ++ output = malloc(sizeof(mpd_OutputEntity)); ++ output->id = -10; ++ output->name = NULL; ++ output->enabled = 0; ++ ++ if (!connection->returnElement) ++ mpd_getNextReturnElement(connection); ++ ++ while (connection->returnElement) { ++ mpd_ReturnElement *re = connection->returnElement; ++ if (strcmp(re->name, "outputid") == 0) { ++ if (output != NULL && output->id >= 0) ++ return output; ++ output->id = atoi(re->value); ++ } else if (strcmp(re->name, "outputname") == 0) { ++ output->name = strdup(re->value); ++ } else if (strcmp(re->name, "outputenabled") == 0) { ++ output->enabled = atoi(re->value); ++ } ++ ++ mpd_getNextReturnElement(connection); ++ if (connection->error) { ++ free(output); ++ return NULL; ++ } ++ ++ } ++ ++ return output; ++} ++ ++void mpd_sendEnableOutputCommand(mpd_Connection * connection, int outputId) ++{ ++ int len = strlen("enableoutput") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "enableoutput \"%i\"\n", outputId); ++ mpd_executeCommand(connection, string); ++ free(string); ++} ++ ++void mpd_sendDisableOutputCommand(mpd_Connection * connection, int outputId) ++{ ++ int len = strlen("disableoutput") + 2 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "disableoutput \"%i\"\n", outputId); ++ mpd_executeCommand(connection, string); ++ free(string); ++} ++ ++void mpd_freeOutputElement(mpd_OutputEntity * output) ++{ ++ free(output->name); ++ free(output); ++} ++ ++/** ++ * mpd_sendNotCommandsCommand ++ * odd naming, but it gets the not allowed commands ++ */ ++ ++void mpd_sendNotCommandsCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "notcommands\n"); ++} ++ ++/** ++ * mpd_sendCommandsCommand ++ * odd naming, but it gets the allowed commands ++ */ ++void mpd_sendCommandsCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "commands\n"); ++} ++ ++/** ++ * Get the next returned command ++ */ ++char *mpd_getNextCommand(mpd_Connection * connection) ++{ ++ return mpd_getNextReturnElementNamed(connection, "command"); ++} ++ ++void mpd_sendUrlHandlersCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "urlhandlers\n"); ++} ++ ++char *mpd_getNextHandler(mpd_Connection * connection) ++{ ++ return mpd_getNextReturnElementNamed(connection, "handler"); ++} ++ ++void mpd_sendTagTypesCommand(mpd_Connection * connection) ++{ ++ mpd_executeCommand(connection, "tagtypes\n"); ++} ++ ++char *mpd_getNextTagType(mpd_Connection * connection) ++{ ++ return mpd_getNextReturnElementNamed(connection, "tagtype"); ++} ++ ++void mpd_startSearch(mpd_Connection * connection, int exact) ++{ ++ if (connection->request) { ++ strcpy(connection->errorStr, "search already in progress"); ++ connection->error = 1; ++ return; ++ } ++ ++ if (exact) ++ connection->request = strdup("find"); ++ else ++ connection->request = strdup("search"); ++} ++ ++void mpd_startStatsSearch(mpd_Connection * connection) ++{ ++ if (connection->request) { ++ strcpy(connection->errorStr, "search already in progress"); ++ connection->error = 1; ++ return; ++ } ++ ++ connection->request = strdup("count"); ++} ++ ++void mpd_startPlaylistSearch(mpd_Connection * connection, int exact) ++{ ++ if (connection->request) { ++ strcpy(connection->errorStr, "search already in progress"); ++ connection->error = 1; ++ return; ++ } ++ ++ if (exact) ++ connection->request = strdup("playlistfind"); ++ else ++ connection->request = strdup("playlistsearch"); ++} ++ ++void mpd_startFieldSearch(mpd_Connection * connection, int type) ++{ ++ char *strtype; ++ int len; ++ ++ if (connection->request) { ++ strcpy(connection->errorStr, "search already in progress"); ++ connection->error = 1; ++ return; ++ } ++ ++ if (type < 0 || type >= MPD_TAG_NUM_OF_ITEM_TYPES) { ++ strcpy(connection->errorStr, "invalid type specified"); ++ connection->error = 1; ++ return; ++ } ++ ++ strtype = mpdTagItemKeys[type]; ++ ++ len = 5 + strlen(strtype) + 1; ++ connection->request = malloc(len); ++ ++ snprintf(connection->request, len, "list %c%s", tolower(strtype[0]), strtype + 1); ++} ++ ++void mpd_addConstraintSearch(mpd_Connection * connection, int type, const char *name) ++{ ++ char *strtype; ++ char *arg; ++ int len; ++ char *string; ++ ++ if (!connection->request) { ++ strcpy(connection->errorStr, "no search in progress"); ++ connection->error = 1; ++ return; ++ } ++ ++ if (type < 0 || type >= MPD_TAG_NUM_OF_ITEM_TYPES) { ++ strcpy(connection->errorStr, "invalid type specified"); ++ connection->error = 1; ++ return; ++ } ++ ++ if (name == NULL) { ++ strcpy(connection->errorStr, "no name specified"); ++ connection->error = 1; ++ return; ++ } ++ ++ string = strdup(connection->request); ++ strtype = mpdTagItemKeys[type]; ++ arg = mpd_sanitizeArg(name); ++ ++ len = strlen(string) + 1 + strlen(strtype) + 2 + strlen(arg) + 2; ++ connection->request = realloc(connection->request, len); ++ snprintf(connection->request, len, "%s %c%s \"%s\"", string, tolower(strtype[0]), strtype + 1, arg); ++ ++ free(string); ++ free(arg); ++} ++ ++void mpd_commitSearch(mpd_Connection * connection) ++{ ++ int len; ++ ++ if (!connection->request) { ++ strcpy(connection->errorStr, "no search in progress"); ++ connection->error = 1; ++ return; ++ } ++ ++ len = strlen(connection->request) + 2; ++ connection->request = realloc(connection->request, len); ++ connection->request[len - 2] = '\n'; ++ connection->request[len - 1] = '\0'; ++ mpd_sendInfoCommand(connection, connection->request); ++ ++ free(connection->request); ++ connection->request = NULL; ++} ++ ++/** ++ * @param connection a MpdConnection ++ * @param path the path to the playlist. ++ * ++ * List the content, with full metadata, of a stored playlist. ++ * ++ */ ++void mpd_sendListPlaylistInfoCommand(mpd_Connection * connection, char *path) ++{ ++ char *arg = mpd_sanitizeArg(path); ++ int len = strlen("listplaylistinfo") + 2 + strlen(arg) + 3; ++ char *query = malloc(len); ++ snprintf(query, len, "listplaylistinfo \"%s\"\n", arg); ++ mpd_sendInfoCommand(connection, query); ++ free(arg); ++ free(query); ++} ++ ++/** ++ * @param connection a MpdConnection ++ * @param path the path to the playlist. ++ * ++ * List the content of a stored playlist. ++ * ++ */ ++void mpd_sendListPlaylistCommand(mpd_Connection * connection, char *path) ++{ ++ char *arg = mpd_sanitizeArg(path); ++ int len = strlen("listplaylist") + 2 + strlen(arg) + 3; ++ char *query = malloc(len); ++ snprintf(query, len, "listplaylist \"%s\"\n", arg); ++ mpd_sendInfoCommand(connection, query); ++ free(arg); ++ free(query); ++} ++ ++void mpd_sendPlaylistClearCommand(mpd_Connection * connection, char *path) ++{ ++ char *sPath = mpd_sanitizeArg(path); ++ int len = strlen("playlistclear") + 2 + strlen(sPath) + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "playlistclear \"%s\"\n", sPath); ++ mpd_executeCommand(connection, string); ++ free(sPath); ++ free(string); ++} ++ ++void mpd_sendPlaylistAddCommand(mpd_Connection * connection, char *playlist, char *path) ++{ ++ char *sPlaylist = mpd_sanitizeArg(playlist); ++ char *sPath = mpd_sanitizeArg(path); ++ int len = strlen("playlistadd") + 2 + strlen(sPlaylist) + 3 + strlen(sPath) + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "playlistadd \"%s\" \"%s\"\n", sPlaylist, sPath); ++ mpd_executeCommand(connection, string); ++ free(sPlaylist); ++ free(sPath); ++ free(string); ++} ++ ++void mpd_sendPlaylistMoveCommand(mpd_Connection * connection, char *playlist, int from, int to) ++{ ++ char *sPlaylist = mpd_sanitizeArg(playlist); ++ int len = strlen("playlistmove") + 2 + strlen(sPlaylist) + 3 + INTLEN + 3 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "playlistmove \"%s\" \"%i\" \"%i\"\n", sPlaylist, from, to); ++ mpd_executeCommand(connection, string); ++ free(sPlaylist); ++ free(string); ++} ++ ++void mpd_sendPlaylistDeleteCommand(mpd_Connection * connection, char *playlist, int pos) ++{ ++ char *sPlaylist = mpd_sanitizeArg(playlist); ++ int len = strlen("playlistdelete") + 2 + strlen(sPlaylist) + 3 + INTLEN + 3; ++ char *string = malloc(len); ++ snprintf(string, len, "playlistdelete \"%s\" \"%i\"\n", sPlaylist, pos); ++ mpd_executeCommand(connection, string); ++ free(sPlaylist); ++ free(string); ++} +--- /dev/null ++++ b/libmpdclient.h +@@ -0,0 +1,661 @@ ++/* libmpdclient ++ (c)2003-2006 by Warren Dukes (warren.dukes@gmail.com) ++ This project's homepage is: http://www.musicpd.org ++ ++ Redistribution and use in source and binary forms, with or without ++ modification, are permitted provided that the following conditions ++ are met: ++ ++ - Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ ++ - Redistributions in binary form must reproduce the above copyright ++ notice, this list of conditions and the following disclaimer in the ++ documentation and/or other materials provided with the distribution. ++ ++ - Neither the name of the Music Player Daemon nor the names of its ++ contributors may be used to endorse or promote products derived from ++ this software without specific prior written permission. ++ ++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR ++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++*/ ++ ++#ifndef LIBMPDCLIENT_H ++#define LIBMPDCLIENT_H ++ ++#ifdef WIN32 ++# define __W32API_USE_DLLIMPORT__ 1 ++#endif ++ ++#include ++#include ++#define MPD_BUFFER_MAX_LENGTH 50000 ++#define MPD_ERRORSTR_MAX_LENGTH 1000 ++#define MPD_WELCOME_MESSAGE "OK MPD " ++ ++#define MPD_ERROR_TIMEOUT 10 /* timeout trying to talk to mpd */ ++#define MPD_ERROR_SYSTEM 11 /* system error */ ++#define MPD_ERROR_UNKHOST 12 /* unknown host */ ++#define MPD_ERROR_CONNPORT 13 /* problems connecting to port on host */ ++#define MPD_ERROR_NOTMPD 14 /* mpd not running on port at host */ ++#define MPD_ERROR_NORESPONSE 15 /* no response on attempting to connect */ ++#define MPD_ERROR_SENDING 16 /* error sending command */ ++#define MPD_ERROR_CONNCLOSED 17 /* connection closed by mpd */ ++#define MPD_ERROR_ACK 18 /* ACK returned! */ ++#define MPD_ERROR_BUFFEROVERRUN 19 /* Buffer was overrun! */ ++ ++#define MPD_ACK_ERROR_UNK -1 ++#define MPD_ERROR_AT_UNK -1 ++ ++#define MPD_ACK_ERROR_NOT_LIST 1 ++#define MPD_ACK_ERROR_ARG 2 ++#define MPD_ACK_ERROR_PASSWORD 3 ++#define MPD_ACK_ERROR_PERMISSION 4 ++#define MPD_ACK_ERROR_UNKNOWN_CMD 5 ++ ++#define MPD_ACK_ERROR_NO_EXIST 50 ++#define MPD_ACK_ERROR_PLAYLIST_MAX 51 ++#define MPD_ACK_ERROR_SYSTEM 52 ++#define MPD_ACK_ERROR_PLAYLIST_LOAD 53 ++#define MPD_ACK_ERROR_UPDATE_ALREADY 54 ++#define MPD_ACK_ERROR_PLAYER_SYNC 55 ++#define MPD_ACK_ERROR_EXIST 56 ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++ typedef enum mpd_TagItems { ++ MPD_TAG_ITEM_ARTIST, ++ MPD_TAG_ITEM_ALBUM, ++ MPD_TAG_ITEM_TITLE, ++ MPD_TAG_ITEM_TRACK, ++ MPD_TAG_ITEM_NAME, ++ MPD_TAG_ITEM_GENRE, ++ MPD_TAG_ITEM_DATE, ++ MPD_TAG_ITEM_COMPOSER, ++ MPD_TAG_ITEM_PERFORMER, ++ MPD_TAG_ITEM_COMMENT, ++ MPD_TAG_ITEM_DISC, ++ MPD_TAG_ITEM_FILENAME, ++ MPD_TAG_ITEM_ANY, ++ MPD_TAG_NUM_OF_ITEM_TYPES ++ } mpd_TagItems; ++ ++ extern char *mpdTagItemKeys[MPD_TAG_NUM_OF_ITEM_TYPES]; ++ ++/* internal stuff don't touch this struct */ ++ typedef struct _mpd_ReturnElement { ++ char *name; ++ char *value; ++ } mpd_ReturnElement; ++ ++/* mpd_Connection ++ * holds info about connection to mpd ++ * use error, and errorStr to detect errors ++ */ ++ typedef struct _mpd_Connection { ++ /* use this to check the version of mpd */ ++ int version[3]; ++ /* IMPORTANT, you want to get the error messages from here */ ++ char errorStr[MPD_ERRORSTR_MAX_LENGTH + 1]; ++ int errorCode; ++ int errorAt; ++ /* this will be set to MPD_ERROR_* if there is an error, 0 if not */ ++ int error; ++ /* DON'T TOUCH any of the rest of this stuff */ ++ int sock; ++ char buffer[MPD_BUFFER_MAX_LENGTH + 1]; ++ int buflen; ++ int bufstart; ++ int doneProcessing; ++ int listOks; ++ int doneListOk; ++ int commandList; ++ mpd_ReturnElement *returnElement; ++ struct timeval timeout; ++ char *request; ++ } mpd_Connection; ++ ++/* mpd_newConnection ++ * use this to open a new connection ++ * you should use mpd_closeConnection, when your done with the connection, ++ * even if an error has occurred ++ * _timeout_ is the connection timeout period in seconds ++ */ ++ mpd_Connection *mpd_newConnection(const char *host, int port, float timeout); ++ ++ void mpd_setConnectionTimeout(mpd_Connection * connection, float timeout); ++ ++/* mpd_closeConnection ++ * use this to close a connection and free'ing subsequent memory ++ */ ++ void mpd_closeConnection(mpd_Connection * connection); ++ ++/* mpd_clearError ++ * clears error ++ */ ++ void mpd_clearError(mpd_Connection * connection); ++ ++/* STATUS STUFF */ ++ ++/* use these with status.state to determine what state the player is in */ ++#define MPD_STATUS_STATE_UNKNOWN 0 ++#define MPD_STATUS_STATE_STOP 1 ++#define MPD_STATUS_STATE_PLAY 2 ++#define MPD_STATUS_STATE_PAUSE 3 ++ ++/* us this with status.volume to determine if mpd has volume support */ ++#define MPD_STATUS_NO_VOLUME -1 ++ ++/* mpd_Status ++ * holds info return from status command ++ */ ++ typedef struct mpd_Status { ++ /* 0-100, or MPD_STATUS_NO_VOLUME when there is no volume support */ ++ int volume; ++ /* 1 if repeat is on, 0 otherwise */ ++ int repeat; ++ /* 1 if random is on, 0 otherwise */ ++ int random; ++ /* playlist length */ ++ int playlistLength; ++ /* playlist, use this to determine when the playlist has changed */ ++ long long playlist; ++ /* use with MPD_STATUS_STATE_* to determine state of player */ ++ int state; ++ /* crossfade setting in seconds */ ++ int crossfade; ++ /* if a song is currently selected (always the case when state is ++ * PLAY or PAUSE), this is the position of the currently ++ * playing song in the playlist, beginning with 0 ++ */ ++ int song; ++ /* Song ID of the currently selected song */ ++ int songid; ++ /* time in seconds that have elapsed in the currently playing/paused ++ * song ++ */ ++ int elapsedTime; ++ /* length in seconds of the currently playing/paused song */ ++ int totalTime; ++ /* current bit rate in kbs */ ++ int bitRate; ++ /* audio sample rate */ ++ unsigned int sampleRate; ++ /* audio bits */ ++ int bits; ++ /* audio channels */ ++ int channels; ++ /* 1 if mpd is updating, 0 otherwise */ ++ int updatingDb; ++ /* error */ ++ char *error; ++ } mpd_Status; ++ ++ void mpd_sendStatusCommand(mpd_Connection * connection); ++ ++/* mpd_getStatus ++ * returns status info, be sure to free it with mpd_freeStatus() ++ * call this after mpd_sendStatusCommand() ++ */ ++ mpd_Status *mpd_getStatus(mpd_Connection * connection); ++ ++/* mpd_freeStatus ++ * free's status info malloc'd and returned by mpd_getStatus ++ */ ++ void mpd_freeStatus(mpd_Status * status); ++ ++ typedef struct _mpd_Stats { ++ int numberOfArtists; ++ int numberOfAlbums; ++ int numberOfSongs; ++ unsigned long uptime; ++ unsigned long dbUpdateTime; ++ unsigned long playTime; ++ unsigned long dbPlayTime; ++ } mpd_Stats; ++ ++ typedef struct _mpd_SearchStats { ++ int numberOfSongs; ++ unsigned long playTime; ++ } mpd_SearchStats; ++ ++ void mpd_sendStatsCommand(mpd_Connection * connection); ++ ++ mpd_Stats *mpd_getStats(mpd_Connection * connection); ++ ++ void mpd_freeStats(mpd_Stats * stats); ++ ++ mpd_SearchStats *mpd_getSearchStats(mpd_Connection * connection); ++ ++ void mpd_freeSearchStats(mpd_SearchStats * stats); ++ ++/* SONG STUFF */ ++ ++#define MPD_SONG_NO_TIME -1 ++#define MPD_SONG_NO_NUM -1 ++#define MPD_SONG_NO_ID -1 ++ ++/* mpd_Song ++ * for storing song info returned by mpd ++ */ ++ typedef struct _mpd_Song { ++ /* filename of song */ ++ char *file; ++ /* artist, maybe NULL if there is no tag */ ++ char *artist; ++ /* title, maybe NULL if there is no tag */ ++ char *title; ++ /* album, maybe NULL if there is no tag */ ++ char *album; ++ /* track, maybe NULL if there is no tag */ ++ char *track; ++ /* name, maybe NULL if there is no tag; it's the name of the current ++ * song, f.e. the icyName of the stream */ ++ char *name; ++ /* date */ ++ char *date; ++ ++ /* added by qball */ ++ /* Genre */ ++ char *genre; ++ /* Composer */ ++ char *composer; ++ /* Performer */ ++ char *performer; ++ /* Disc */ ++ char *disc; ++ /* Comment */ ++ char *comment; ++ ++ /* length of song in seconds, check that it is not MPD_SONG_NO_TIME */ ++ int time; ++ /* if plchanges/playlistinfo/playlistid used, is the position of the ++ * song in the playlist */ ++ int pos; ++ /* song id for a song in the playlist */ ++ int id; ++ } mpd_Song; ++ ++/* mpd_newSong ++ * use to allocate memory for a new mpd_Song ++ * file, artist, etc all initialized to NULL ++ * if your going to assign values to file, artist, etc ++ * be sure to malloc or strdup the memory ++ * use mpd_freeSong to free the memory for the mpd_Song, it will also ++ * free memory for file, artist, etc, so don't do it yourself ++ */ ++ mpd_Song *mpd_newSong(void); ++ ++/* mpd_freeSong ++ * use to free memory allocated by mpd_newSong ++ * also it will free memory pointed to by file, artist, etc, so be careful ++ */ ++ void mpd_freeSong(mpd_Song * song); ++ ++/* mpd_songDup ++ * works like strDup, but for a mpd_Song ++ */ ++ mpd_Song *mpd_songDup(mpd_Song * song); ++ ++/* DIRECTORY STUFF */ ++ ++/* mpd_Directory ++ * used to store info fro directory (right now that just the path) ++ */ ++ typedef struct _mpd_Directory { ++ char *path; ++ } mpd_Directory; ++ ++/* mpd_newDirectory ++ * allocates memory for a new directory ++ * use mpd_freeDirectory to free this memory ++ */ ++ mpd_Directory *mpd_newDirectory(void); ++ ++/* mpd_freeDirectory ++ * used to free memory allocated with mpd_newDirectory, and it frees ++ * path of mpd_Directory, so be careful ++ */ ++ void mpd_freeDirectory(mpd_Directory * directory); ++ ++/* mpd_directoryDup ++ * works like strdup, but for mpd_Directory ++ */ ++ mpd_Directory *mpd_directoryDup(mpd_Directory * directory); ++ ++/* PLAYLISTFILE STUFF */ ++ ++/* mpd_PlaylistFile ++ * stores info about playlist file returned by lsinfo ++ */ ++ typedef struct _mpd_PlaylistFile { ++ char *path; ++ } mpd_PlaylistFile; ++ ++/* mpd_newPlaylistFile ++ * allocates memory for new mpd_PlaylistFile, path is set to NULL ++ * free this memory with mpd_freePlaylistFile ++ */ ++ mpd_PlaylistFile *mpd_newPlaylistFile(void); ++ ++/* mpd_freePlaylist ++ * free memory allocated for freePlaylistFile, will also free ++ * path, so be careful ++ */ ++ void mpd_freePlaylistFile(mpd_PlaylistFile * playlist); ++ ++/* mpd_playlistFileDup ++ * works like strdup, but for mpd_PlaylistFile ++ */ ++ mpd_PlaylistFile *mpd_playlistFileDup(mpd_PlaylistFile * playlist); ++ ++/* INFO ENTITY STUFF */ ++ ++/* the type of entity returned from one of the commands that generates info ++ * use in conjunction with mpd_InfoEntity.type ++ */ ++#define MPD_INFO_ENTITY_TYPE_DIRECTORY 0 ++#define MPD_INFO_ENTITY_TYPE_SONG 1 ++#define MPD_INFO_ENTITY_TYPE_PLAYLISTFILE 2 ++ ++/* mpd_InfoEntity ++ * stores info on stuff returned info commands ++ */ ++ typedef struct mpd_InfoEntity { ++ /* the type of entity, use with MPD_INFO_ENTITY_TYPE_* to determine ++ * what this entity is (song, directory, etc...) ++ */ ++ int type; ++ /* the actual data you want, mpd_Song, mpd_Directory, etc */ ++ union { ++ mpd_Directory *directory; ++ mpd_Song *song; ++ mpd_PlaylistFile *playlistFile; ++ } info; ++ } mpd_InfoEntity; ++ ++ mpd_InfoEntity *mpd_newInfoEntity(void); ++ ++ void mpd_freeInfoEntity(mpd_InfoEntity * entity); ++ ++/* INFO COMMANDS AND STUFF */ ++ ++/* use this function to loop over after calling Info/Listall functions */ ++ mpd_InfoEntity *mpd_getNextInfoEntity(mpd_Connection * connection); ++ ++/* fetches the currently seeletect song (the song referenced by status->song ++ * and status->songid*/ ++ void mpd_sendCurrentSongCommand(mpd_Connection * connection); ++ ++/* songNum of -1, means to display the whole list */ ++ void mpd_sendPlaylistInfoCommand(mpd_Connection * connection, int songNum); ++ ++/* songId of -1, means to display the whole list */ ++ void mpd_sendPlaylistIdCommand(mpd_Connection * connection, int songId); ++ ++/* use this to get the changes in the playlist since version _playlist_ */ ++ void mpd_sendPlChangesCommand(mpd_Connection * connection, long long playlist); ++ ++/** ++ * @param connection: A valid and connected mpd_Connection. ++ * @param playlist: The playlist version you want the diff with. ++ * A more bandwidth efficient version of the mpd_sendPlChangesCommand. ++ * It only returns the pos+id of the changes song. ++ */ ++ void mpd_sendPlChangesPosIdCommand(mpd_Connection * connection, long long playlist); ++ ++/* recursivel fetches all songs/dir/playlists in "dir* (no metadata is ++ * returned) */ ++ void mpd_sendListallCommand(mpd_Connection * connection, const char *dir); ++ ++/* same as sendListallCommand, but also metadata is returned */ ++ void mpd_sendListallInfoCommand(mpd_Connection * connection, const char *dir); ++ ++/* non-recursive version of ListallInfo */ ++ void mpd_sendLsInfoCommand(mpd_Connection * connection, const char *dir); ++ ++#define MPD_TABLE_ARTIST MPD_TAG_ITEM_ARTIST ++#define MPD_TABLE_ALBUM MPD_TAG_ITEM_ALBUM ++#define MPD_TABLE_TITLE MPD_TAG_ITEM_TITLE ++#define MPD_TABLE_FILENAME MPD_TAG_ITEM_FILENAME ++ ++ void mpd_sendSearchCommand(mpd_Connection * connection, int table, const char *str); ++ ++ void mpd_sendFindCommand(mpd_Connection * connection, int table, const char *str); ++ ++/* LIST TAG COMMANDS */ ++ ++/* use this function fetch next artist entry, be sure to free the returned ++ * string. NULL means there are no more. Best used with sendListArtists ++ */ ++ char *mpd_getNextArtist(mpd_Connection * connection); ++ ++ char *mpd_getNextAlbum(mpd_Connection * connection); ++ ++ char *mpd_getNextTag(mpd_Connection * connection, int type); ++ ++/* list artist or albums by artist, arg1 should be set to the artist if ++ * listing albums by a artist, otherwise NULL for listing all artists or albums ++ */ ++ void mpd_sendListCommand(mpd_Connection * connection, int table, const char *arg1); ++ ++/* SIMPLE COMMANDS */ ++ ++ void mpd_sendAddCommand(mpd_Connection * connection, const char *file); ++ ++ int mpd_sendAddIdCommand(mpd_Connection * connection, const char *file); ++ ++ void mpd_sendDeleteCommand(mpd_Connection * connection, int songNum); ++ ++ void mpd_sendDeleteIdCommand(mpd_Connection * connection, int songNum); ++ ++ void mpd_sendSaveCommand(mpd_Connection * connection, const char *name); ++ ++ void mpd_sendLoadCommand(mpd_Connection * connection, const char *name); ++ ++ void mpd_sendRmCommand(mpd_Connection * connection, const char *name); ++ ++ void mpd_sendRenameCommand(mpd_Connection * connection, const char *from, const char *to); ++ ++ void mpd_sendShuffleCommand(mpd_Connection * connection); ++ ++ void mpd_sendClearCommand(mpd_Connection * connection); ++ ++/* use this to start playing at the beginning, useful when in random mode */ ++#define MPD_PLAY_AT_BEGINNING -1 ++ ++ void mpd_sendPlayCommand(mpd_Connection * connection, int songNum); ++ ++ void mpd_sendPlayIdCommand(mpd_Connection * connection, int songNum); ++ ++ void mpd_sendStopCommand(mpd_Connection * connection); ++ ++ void mpd_sendPauseCommand(mpd_Connection * connection, int pauseMode); ++ ++ void mpd_sendNextCommand(mpd_Connection * connection); ++ ++ void mpd_sendPrevCommand(mpd_Connection * connection); ++ ++ void mpd_sendMoveCommand(mpd_Connection * connection, int from, int to); ++ ++ void mpd_sendMoveIdCommand(mpd_Connection * connection, int from, int to); ++ ++ void mpd_sendSwapCommand(mpd_Connection * connection, int song1, int song2); ++ ++ void mpd_sendSwapIdCommand(mpd_Connection * connection, int song1, int song2); ++ ++ void mpd_sendSeekCommand(mpd_Connection * connection, int song, int time); ++ ++ void mpd_sendSeekIdCommand(mpd_Connection * connection, int song, int time); ++ ++ void mpd_sendRepeatCommand(mpd_Connection * connection, int repeatMode); ++ ++ void mpd_sendRandomCommand(mpd_Connection * connection, int randomMode); ++ ++ void mpd_sendSetvolCommand(mpd_Connection * connection, int volumeChange); ++ ++/* WARNING: don't use volume command, its depreacted */ ++ void mpd_sendVolumeCommand(mpd_Connection * connection, int volumeChange); ++ ++ void mpd_sendCrossfadeCommand(mpd_Connection * connection, int seconds); ++ ++ void mpd_sendUpdateCommand(mpd_Connection * connection, char *path); ++ ++/* returns the update job id, call this after a update command*/ ++ int mpd_getUpdateId(mpd_Connection * connection); ++ ++ void mpd_sendPasswordCommand(mpd_Connection * connection, const char *pass); ++ ++/* after executing a command, when your done with it to get its status ++ * (you want to check connection->error for an error) ++ */ ++ void mpd_finishCommand(mpd_Connection * connection); ++ ++/* command list stuff, use this to do things like add files very quickly */ ++ void mpd_sendCommandListBegin(mpd_Connection * connection); ++ ++ void mpd_sendCommandListOkBegin(mpd_Connection * connection); ++ ++ void mpd_sendCommandListEnd(mpd_Connection * connection); ++ ++/* advance to the next listOk ++ * returns 0 if advanced to the next list_OK, ++ * returns -1 if it advanced to an OK or ACK */ ++ int mpd_nextListOkCommand(mpd_Connection * connection); ++ ++ typedef struct _mpd_OutputEntity { ++ int id; ++ char *name; ++ int enabled; ++ } mpd_OutputEntity; ++ ++ void mpd_sendOutputsCommand(mpd_Connection * connection); ++ ++ mpd_OutputEntity *mpd_getNextOutput(mpd_Connection * connection); ++ ++ void mpd_sendEnableOutputCommand(mpd_Connection * connection, int outputId); ++ ++ void mpd_sendDisableOutputCommand(mpd_Connection * connection, int outputId); ++ ++ void mpd_freeOutputElement(mpd_OutputEntity * output); ++ ++/** ++ * @param connection a #mpd_Connection ++ * ++ * Queries mpd for the allowed commands ++ */ ++ void mpd_sendCommandsCommand(mpd_Connection * connection); ++ ++/** ++ * @param connection a #mpd_Connection ++ * ++ * Queries mpd for the not allowed commands ++ */ ++ void mpd_sendNotCommandsCommand(mpd_Connection * connection); ++ ++/** ++ * @param connection a #mpd_Connection ++ * ++ * returns the next supported command. ++ * ++ * @returns a string, needs to be free'ed ++ */ ++ char *mpd_getNextCommand(mpd_Connection * connection); ++ ++ void mpd_sendUrlHandlersCommand(mpd_Connection * connection); ++ ++ char *mpd_getNextHandler(mpd_Connection * connection); ++ ++ void mpd_sendTagTypesCommand(mpd_Connection * connection); ++ ++ char *mpd_getNextTagType(mpd_Connection * connection); ++ ++/** ++ * @param connection a MpdConnection ++ * @param path the path to the playlist. ++ * ++ * List the content, with full metadata, of a stored playlist. ++ * ++ */ ++ void mpd_sendListPlaylistInfoCommand(mpd_Connection * connection, char *path); ++ ++/** ++ * @param connection a MpdConnection ++ * @param path the path to the playlist. ++ * ++ * List the content of a stored playlist. ++ * ++ */ ++ void mpd_sendListPlaylistCommand(mpd_Connection * connection, char *path); ++ ++/** ++ * @param connection a #mpd_Connection ++ * @param exact if to match exact ++ * ++ * starts a search, use mpd_addConstraintSearch to add ++ * a constraint to the search, and mpd_commitSearch to do the actual search ++ */ ++ void mpd_startSearch(mpd_Connection * connection, int exact); ++ ++/** ++ * @param connection a #mpd_Connection ++ * @param type ++ * @param name ++ */ ++ void mpd_addConstraintSearch(mpd_Connection * connection, int type, const char *name); ++ ++/** ++ * @param connection a #mpd_Connection ++ */ ++ void mpd_commitSearch(mpd_Connection * connection); ++ ++/** ++ * @param connection a #mpd_Connection ++ * @param type The type to search for ++ * ++ * starts a search for fields... f.e. get a list of artists would be: ++ * @code ++ * mpd_startFieldSearch(connection, MPD_TAG_ITEM_ARTIST); ++ * mpd_commitSearch(connection); ++ * @endcode ++ * ++ * or get a list of artist in genre "jazz" would be: ++ * @code ++ * mpd_startFieldSearch(connection, MPD_TAG_ITEM_ARTIST); ++ * mpd_addConstraintSearch(connection, MPD_TAG_ITEM_GENRE, "jazz") ++ * mpd_commitSearch(connection); ++ * @endcode ++ * ++ * mpd_startSearch will return a list of songs (and you need mpd_getNextInfoEntity) ++ * this one will return a list of only one field (the one specified with type) and you need ++ * mpd_getNextTag to get the results ++ */ ++ void mpd_startFieldSearch(mpd_Connection * connection, int type); ++ ++ void mpd_startPlaylistSearch(mpd_Connection * connection, int exact); ++ ++ void mpd_startStatsSearch(mpd_Connection * connection); ++ ++ void mpd_sendPlaylistClearCommand(mpd_Connection * connection, char *path); ++ ++ void mpd_sendPlaylistAddCommand(mpd_Connection * connection, char *playlist, char *path); ++ ++ void mpd_sendPlaylistMoveCommand(mpd_Connection * connection, char *playlist, int from, int to); ++ ++ void mpd_sendPlaylistDeleteCommand(mpd_Connection * connection, char *playlist, int pos); ++#ifdef __cplusplus ++} ++#endif ++#endif diff --git a/lcd4linux/patches/160-uinput_defs.patch b/lcd4linux/patches/160-uinput_defs.patch new file mode 100755 index 000000000..44b24b3c8 --- /dev/null +++ b/lcd4linux/patches/160-uinput_defs.patch @@ -0,0 +1,24 @@ +--- a/drv_G15.c ++++ b/drv_G15.c +@@ -42,6 +42,7 @@ + + #include + #include ++#include + #include + #include + +@@ -269,8 +270,13 @@ void drv_G15_initKeyHandling(char *devic + } + memset(&device, 0, sizeof(device)); + strncpy(device.name, "G15 Keys", UINPUT_MAX_NAME_SIZE); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + device.id.bustype = BUS_USB; + device.id.version = 4; ++#else ++ device.idbus = BUS_USB; ++ device.idversion = 4; ++#endif + + ioctl(uinput_fd, UI_SET_EVBIT, EV_KEY); + diff --git a/lcd4linux/patches/170-add-generic-spidev-driver.patch b/lcd4linux/patches/170-add-generic-spidev-driver.patch new file mode 100755 index 000000000..4cd53d6a5 --- /dev/null +++ b/lcd4linux/patches/170-add-generic-spidev-driver.patch @@ -0,0 +1,195 @@ +--- a/Makefile.am ++++ b/Makefile.am +@@ -71,6 +71,8 @@ drv_generic_i2c.c \ + drv_generic_i2c.h \ + drv_generic_keypad.c \ + drv_generic_keypad.h \ ++drv_generic_spidev.c \ ++drv_generic_spidev.h \ + drv_ASTUSB.c \ + drv_BeckmannEgle.c \ + drv_BWCT.c \ +--- /dev/null ++++ b/drv_generic_spidev.c +@@ -0,0 +1,89 @@ ++/* $Id$ ++ * $URL$ ++ * ++ * generic driver helper for displays connected via SPI bus ++ * ++ * Copyright (C) 2012 Gabor Juhos ++ * ++ * This file is part of LCD4Linux. ++ * ++ * LCD4Linux is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2, or (at your option) ++ * any later version. ++ * ++ * LCD4Linux is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * ++ */ ++ ++#include "config.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "debug.h" ++#include "qprintf.h" ++#include "cfg.h" ++#include "drv_generic_spidev.h" ++ ++static char *generic_spidev_section = ""; ++static char *generic_spidev_driver = ""; ++static int generic_spidev_fd; ++ ++int drv_generic_spidev_open(const char *section, const char *driver) ++{ ++ char *spidev; ++ ++ udelay_init(); ++ ++ generic_spidev_section = (char *) section; ++ generic_spidev_driver = (char *) driver; ++ ++ spidev = cfg_get(generic_spidev_section, "Port", NULL); ++ ++ info("%s: initializing SPI device %s", generic_spidev_driver, spidev); ++ generic_spidev_fd = open(spidev, O_WRONLY); ++ if (generic_spidev_fd < 0) { ++ error("%s: unable to open SPI device %s!\n", generic_spidev_driver, spidev); ++ goto exit_error; ++ } ++ ++ return 0; ++ ++ exit_error: ++ free(spidev); ++ return -1; ++} ++ ++int drv_generic_spidev_close(void) ++{ ++ close(generic_spidev_fd); ++ return 0; ++} ++ ++int drv_generic_spidev_transfer(const int count, struct spi_ioc_transfer *tr) ++{ ++ int ret; ++ ++ ret = ioctl(generic_spidev_fd, SPI_IOC_MESSAGE(count), tr); ++ if (ret < count) { ++ error("%s: can't send SPI message! (%s)\n", ++ generic_spidev_driver, strerror(errno)); ++ return -1; ++ } ++ ++ return 0; ++} +--- /dev/null ++++ b/drv_generic_spidev.h +@@ -0,0 +1,54 @@ ++/* $Id$ ++ * $URL$ ++ * ++ * generic driver helper for displays connected via SPI bus ++ * ++ * Copyright (C) 2012 Gabor Juhos ++ * Copyright (C) 2012 The LCD4Linux Team ++ * ++ * This file is part of LCD4Linux. ++ * ++ * LCD4Linux is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2, or (at your option) ++ * any later version. ++ * ++ * LCD4Linux is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * ++ */ ++ ++/* ++ * ++ * exported fuctions: ++ * ++ * int drv_generic_spidev_open (const char *section, const char *driver) ++ * reads 'Port' entry from config and opens ++ * the SPI device ++ * returns 0 if ok, -1 on failure ++ * ++ * int drv_generic_spidev_close (void) ++ * closes SPI device ++ * returns 0 if ok, -1 on failure ++ * ++ * void drv_generic_spidev_transfer (int count, struct spi_ioc_transfer *tr) ++ * transfer data to/from the SPI device ++ * ++ */ ++ ++#ifndef _DRV_GENERIC_SPIDEV_H_ ++#define _DRV_GENERIC_SPIDEV_H_ ++ ++#include ++ ++int drv_generic_spidev_open(const char *section, const char *driver); ++int drv_generic_spidev_close(void); ++int drv_generic_spidev_transfer(const int count, struct spi_ioc_transfer *tr); ++ ++#endif /* _DRV_GENERIC_SPIDEV_H_ */ +--- a/drivers.m4 ++++ b/drivers.m4 +@@ -301,6 +301,7 @@ PARPORT="no" + SERIAL="no" + I2C="no" + KEYPAD="no" ++SPIDEV="no" + + # generic libraries + LIBUSB="no" +@@ -936,6 +937,12 @@ if test "$LIBJPEG" = "yes"; then + DRVLIBS="$DRVLIBS -ljpeg" + fi + ++# generic spidev driver ++if test "$SPIDEV" = "yes"; then ++ DRIVERS="$DRIVERS drv_generic_spidev.o" ++ AC_DEFINE(WITH_SPIDEV, 1, [SPIDEV driver]) ++fi ++ + # libusb + if test "$LIBUSB" = "yes"; then + DRVLIBS="$DRVLIBS -lusb" +--- a/configure.ac ++++ b/configure.ac +@@ -115,6 +115,9 @@ AC_ARG_WITH(outb, + + AC_CHECK_HEADERS([asm/io.h] [linux/parport.h linux/ppdev.h], [has_parport="true"], [has_parport="false"]) + ++# check for spidev ++AC_CHECK_HEADERS([linux/spi/spidev.h], [has_spidev="true"], [has_spidev="false"]) ++ + # drivers + sinclude(drivers.m4) + diff --git a/lcd4linux/patches/173-glcd2usb-bigendian-fix.patch b/lcd4linux/patches/173-glcd2usb-bigendian-fix.patch new file mode 100755 index 000000000..97e03c748 --- /dev/null +++ b/lcd4linux/patches/173-glcd2usb-bigendian-fix.patch @@ -0,0 +1,20 @@ +--- a/drv_GLCD2USB.c ++++ b/drv_GLCD2USB.c +@@ -48,6 +48,7 @@ + #include + #include + #include ++#include + + #include "debug.h" + #include "cfg.h" +@@ -487,6 +488,9 @@ static int drv_GLCD2USB_start(const char + return -1; + } + ++ buffer.display_info.width = le16toh(buffer.display_info.width); ++ buffer.display_info.height = le16toh(buffer.display_info.height); ++ + info("%s: display name = %s", Name, buffer.display_info.name); + info("%s: display resolution = %d * %d", Name, buffer.display_info.width, buffer.display_info.height); + info("%s: display flags: %x", Name, buffer.display_info.flags); diff --git a/libell/Makefile b/libell/Makefile old mode 100644 new mode 100755 diff --git a/libmbim/Makefile b/libmbim/Makefile deleted file mode 100755 index cfcb5ba96..000000000 --- a/libmbim/Makefile +++ /dev/null @@ -1,94 +0,0 @@ -# -# Copyright (C) 2016 Velocloud Inc. -# Copyright (C) 2016 Aleksander Morgado -# -# This is free software, licensed under the GNU General Public License v2. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=libmbim -PKG_SOURCE_VERSION:=1.29.2 -PKG_RELEASE:=1 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/libmbim.git -#PKG_MIRROR_HASH:=0b0b46016738fc22355d5a58c8a2d1b2f04906c49c51a50b57a09640d13b00b7 - -PKG_MAINTAINER:=Nicholas Smith - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/nls.mk -include $(INCLUDE_DIR)/meson.mk - -TARGET_CFLAGS += -ffunction-sections -fdata-sections -fno-merge-all-constants -fmerge-constants -TARGET_LDFLAGS += -Wl,--gc-sections - -MESON_ARGS += \ - -Dintrospection=false \ - -Dman=false \ - -Dbash_completion=false \ - -Db_lto=true - -define Package/libmbim - SECTION:=libs - CATEGORY:=Libraries - DEPENDS:=+glib2 - TITLE:=Helper library and utils to talk to MBIM enabled modems - URL:=https://www.freedesktop.org/wiki/Software/libmbim - LICENSE:=LGPL-2.0-or-later - LICENSE_FILES:=COPYING.LIB -endef - -define Package/libmbim/description - Helper library to talk to MBIM enabled modems. - Add mbim-utils for extra utilities. -endef - -define Package/mbim-utils - SECTION:=utils - CATEGORY:=Utilities - DEPENDS:=+libmbim - TITLE:=Utilities to talk to MBIM enabled modems - URL:=https://www.freedesktop.org/wiki/Software/libmbim - LICENSE:=GPL-2.0-or-later - LICENSE_FILES:=COPYING -endef - -define Build/InstallDev - $(INSTALL_DIR) $(1)/usr/include - $(CP) \ - $(PKG_INSTALL_DIR)/usr/include/libmbim-glib \ - $(1)/usr/include/ - - $(INSTALL_DIR) $(1)/usr/lib - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/libmbim*.so* \ - $(1)/usr/lib/ - - $(INSTALL_DIR) $(1)/usr/lib/pkgconfig - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/mbim-glib.pc \ - $(1)/usr/lib/pkgconfig -endef - -define Package/libmbim/install - $(INSTALL_DIR) \ - $(1)/usr/lib \ - $(1)/usr/libexec - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/libmbim*.so.* \ - $(1)/usr/lib/ - - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/libexec/mbim-proxy $(1)/usr/libexec/ -endef - -define Package/mbim-utils/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mbimcli $(1)/usr/bin/ - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mbim-network $(1)/usr/bin/ -endef - -$(eval $(call BuildPackage,libmbim)) -$(eval $(call BuildPackage,mbim-utils)) diff --git a/libqmi/Config.in b/libqmi/Config.in deleted file mode 100755 index 7dfa7ca52..000000000 --- a/libqmi/Config.in +++ /dev/null @@ -1,31 +0,0 @@ -menu "Configuration" - depends on PACKAGE_libqmi - -config LIBQMI_WITH_MBIM_QMUX - bool "Include MBIM QMUX service support" - default y - help - Compile libqmi with QMI-over-MBIM support - -config LIBQMI_WITH_QRTR_GLIB - bool "Include QRTR support" - default y - help - Compile libqmi with QRTR support - -choice - prompt "Select QMI message collection to build" - default LIBQMI_COLLECTION_BASIC - - config LIBQMI_COLLECTION_MINIMAL - depends on !MODEMMANAGER_WITH_QMI - bool "minimal" - - config LIBQMI_COLLECTION_BASIC - bool "basic (default)" - - config LIBQMI_COLLECTION_FULL - bool "full" -endchoice - -endmenu diff --git a/libqmi/Makefile b/libqmi/Makefile deleted file mode 100755 index cecee6cb6..000000000 --- a/libqmi/Makefile +++ /dev/null @@ -1,111 +0,0 @@ -# -# Copyright (C) 2016 Velocloud Inc. -# Copyright (C) 2016 Aleksander Morgado -# -# This is free software, licensed under the GNU General Public License v2. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=libqmi -PKG_SOURCE_VERSION:=1.33.3 -PKG_RELEASE:=1 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/libqmi.git -#PKG_MIRROR_HASH:=711d16d75a6a9afaefcf2be1bc845a4a6181dff786dfbd079e41e91279a0be91 - -PKG_MAINTAINER:=Nicholas Smith - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/nls.mk -include $(INCLUDE_DIR)/meson.mk - -TARGET_CFLAGS += -ffunction-sections -fdata-sections -fno-merge-all-constants -fmerge-constants -TARGET_LDFLAGS += -Wl,--gc-sections - -define Package/libqmi/config - source "$(SOURCE)/Config.in" -endef - -define Package/libqmi - SECTION:=libs - CATEGORY:=Libraries - DEPENDS:= \ - +glib2 \ - +LIBQMI_WITH_MBIM_QMUX:libmbim \ - +LIBQMI_WITH_QRTR_GLIB:libqrtr-glib - TITLE:=Helper library to talk to QMI enabled modems - URL:=https://www.freedesktop.org/wiki/Software/libqmi - LICENSE:=LGPL-2.0-or-later - LICENSE_FILES:=COPYING.LIB -endef - -define Package/libqmi/description - Helper library talk to QMI enabled modems. - Add qmi-utils for extra utilities. -endef - -define Package/qmi-utils - SECTION:=utils - CATEGORY:=Utilities - DEPENDS:=+libqmi - TITLE:=Utilities to talk to QMI enabled modems - URL:=https://www.freedesktop.org/wiki/Software/libqmi - LICENSE:=GPL-2.0-or-later - LICENSE_FILES:=COPYING -endef - -define Package/libqmi-utils/description - Utils to talk to QMI enabled modems -endef - -MESON_ARGS += \ - -Dudev=false \ - -Dintrospection=false \ - -Dman=false \ - -Dbash_completion=false \ - -Db_lto=true \ - -Dmbim_qmux=$(if $(CONFIG_LIBQMI_WITH_MBIM_QMUX),true,false) \ - -Dqrtr=$(if $(CONFIG_LIBQMI_WITH_QRTR_GLIB),true,false) \ - -Dcollection=$(if $(CONFIG_LIBQMI_COLLECTION_MINIMAL),minimal\ - ,$(if $(CONFIG_LIBQMI_COLLECTION_BASIC),basic,full)) - -define Build/InstallDev - $(INSTALL_DIR) $(1)/usr/include - $(CP) \ - $(PKG_INSTALL_DIR)/usr/include/libqmi-glib \ - $(1)/usr/include/ - - $(INSTALL_DIR) $(1)/usr/lib - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/libqmi*.so* \ - $(1)/usr/lib/ - - $(INSTALL_DIR) $(1)/usr/lib/pkgconfig - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/qmi-glib.pc \ - $(1)/usr/lib/pkgconfig -endef - -define Package/libqmi/install - $(INSTALL_DIR) \ - $(1)/usr/lib \ - $(1)/usr/libexec - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/libqmi*.so.* \ - $(1)/usr/lib/ - - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/libexec/qmi-proxy $(1)/usr/libexec/ -endef - -define Package/qmi-utils/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/qmicli $(1)/usr/bin/ - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/qmi-network $(1)/usr/bin/ - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/qmi-firmware-update $(1)/usr/bin/ -endef - -$(eval $(call BuildPackage,libqmi)) -$(eval $(call BuildPackage,qmi-utils)) diff --git a/luci-app-adguardhome/Makefile b/luci-app-adguardhome/Makefile new file mode 100755 index 000000000..db03e8acb --- /dev/null +++ b/luci-app-adguardhome/Makefile @@ -0,0 +1,57 @@ +# Copyright (C) 2018-2019 Lienol +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-adguardhome +PKG_MAINTAINER:= + +LUCI_TITLE:=LuCI app for AdGuardHome +LUCI_PKGARCH:=all +LUCI_DEPENDS:=+ca-certs +curl +wget-ssl +PACKAGE_$(PKG_NAME)_INCLUDE_binary:adguardhome +LUCI_DESCRIPTION:=LuCI support for AdGuardHome + +define Package/$(PKG_NAME)/config +config PACKAGE_$(PKG_NAME)_INCLUDE_binary + bool "Include Binary File" + default y +endef + +PKG_CONFIG_DEPENDS:= CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_binary + +define Package/luci-app-adguardhome/conffiles +/usr/share/AdGuardHome/links.txt +/etc/config/AdGuardHome +/etc/AdGuardHome.yaml +endef + +define Package/luci-app-adguardhome/postinst +#!/bin/sh + /etc/init.d/AdGuardHome enable >/dev/null 2>&1 + enable=$(uci get AdGuardHome.AdGuardHome.enabled 2>/dev/null) + if [ "$enable" == "1" ]; then + /etc/init.d/AdGuardHome reload + fi + rm -f /tmp/luci-indexcache + rm -f /tmp/luci-modulecache/* +exit 0 +endef + +define Package/luci-app-adguardhome/prerm +#!/bin/sh +if [ -z "$${IPKG_INSTROOT}" ]; then + /etc/init.d/AdGuardHome disable + /etc/init.d/AdGuardHome stop +uci -q batch <<-EOF >/dev/null 2>&1 + delete ucitrack.@AdGuardHome[-1] + commit ucitrack +EOF +fi +exit 0 +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-adguardhome/luasrc/controller/AdGuardHome.lua b/luci-app-adguardhome/luasrc/controller/AdGuardHome.lua new file mode 100755 index 000000000..e9d37a766 --- /dev/null +++ b/luci-app-adguardhome/luasrc/controller/AdGuardHome.lua @@ -0,0 +1,130 @@ +module("luci.controller.AdGuardHome",package.seeall) +local fs=require"nixio.fs" +local http=require"luci.http" +local uci=require"luci.model.uci".cursor() +function index() +local page = entry({"admin", "services", "AdGuardHome"},alias("admin", "services", "AdGuardHome", "base"),_("AdGuard Home")) +page.order = 10 +page.dependent = true +page.acl_depends = { "luci-app-adguardhome" } +entry({"admin","services","AdGuardHome","base"},cbi("AdGuardHome/base"),_("Base Setting"),1).leaf = true +entry({"admin","services","AdGuardHome","log"},form("AdGuardHome/log"),_("Log"),2).leaf = true +entry({"admin","services","AdGuardHome","manual"},cbi("AdGuardHome/manual"),_("Manual Config"),3).leaf = true +entry({"admin","services","AdGuardHome","status"},call("act_status")).leaf=true +entry({"admin", "services", "AdGuardHome", "check"}, call("check_update")) +entry({"admin", "services", "AdGuardHome", "doupdate"}, call("do_update")) +entry({"admin", "services", "AdGuardHome", "getlog"}, call("get_log")) +entry({"admin", "services", "AdGuardHome", "dodellog"}, call("do_dellog")) +entry({"admin", "services", "AdGuardHome", "reloadconfig"}, call("reload_config")) +entry({"admin", "services", "AdGuardHome", "gettemplateconfig"}, call("get_template_config")) +end +function get_template_config() + local b + local d="" + for cnt in io.lines("/tmp/resolv.conf.d/resolv.conf.auto") do + b=string.match (cnt,"^[^#]*nameserver%s+([^%s]+)$") + if (b~=nil) then + d=d.." - "..b.."\n" + end + end + local f=io.open("/usr/share/AdGuardHome/AdGuardHome_template.yaml", "r+") + local tbl = {} + local a="" + while (1) do + a=f:read("*l") + if (a=="#bootstrap_dns") then + a=d + elseif (a=="#upstream_dns") then + a=d + elseif (a==nil) then + break + end + table.insert(tbl, a) + end + f:close() + http.prepare_content("text/plain; charset=utf-8") + http.write(table.concat(tbl, "\n")) +end +function reload_config() + fs.remove("/tmp/AdGuardHometmpconfig.yaml") + http.prepare_content("application/json") + http.write('') +end +function act_status() + local e={} + local binpath=uci:get("AdGuardHome","AdGuardHome","binpath") + e.running=luci.sys.call("pgrep "..binpath.." >/dev/null")==0 + e.redirect=(fs.readfile("/var/run/AdGredir")=="1") + http.prepare_content("application/json") + http.write_json(e) +end +function do_update() + fs.writefile("/var/run/lucilogpos","0") + http.prepare_content("application/json") + http.write('') + local arg + if luci.http.formvalue("force") == "1" then + arg="force" + else + arg="" + end + if fs.access("/var/run/update_core") then + if arg=="force" then + luci.sys.exec("kill $(pgrep /usr/share/AdGuardHome/update_core.sh) ; sh /usr/share/AdGuardHome/update_core.sh "..arg.." >/tmp/AdGuardHome_update.log 2>&1 &") + end + else + luci.sys.exec("sh /usr/share/AdGuardHome/update_core.sh "..arg.." >/tmp/AdGuardHome_update.log 2>&1 &") + end +end +function get_log() + local logfile=uci:get("AdGuardHome","AdGuardHome","logfile") + if (logfile==nil) then + http.write("no log available\n") + return + elseif (logfile=="syslog") then + if not fs.access("/var/run/AdGuardHomesyslog") then + luci.sys.exec("(/usr/share/AdGuardHome/getsyslog.sh &); sleep 1;") + end + logfile="/tmp/AdGuardHometmp.log" + fs.writefile("/var/run/AdGuardHomesyslog","1") + elseif not fs.access(logfile) then + http.write("") + return + end + http.prepare_content("text/plain; charset=utf-8") + local fdp + if fs.access("/var/run/lucilogreload") then + fdp=0 + fs.remove("/var/run/lucilogreload") + else + fdp=tonumber(fs.readfile("/var/run/lucilogpos")) or 0 + end + local f=io.open(logfile, "r+") + f:seek("set",fdp) + local a=f:read(2048000) or "" + fdp=f:seek() + fs.writefile("/var/run/lucilogpos",tostring(fdp)) + f:close() + http.write(a) +end +function do_dellog() + local logfile=uci:get("AdGuardHome","AdGuardHome","logfile") + fs.writefile(logfile,"") + http.prepare_content("application/json") + http.write('') +end +function check_update() + http.prepare_content("text/plain; charset=utf-8") + local fdp=tonumber(fs.readfile("/var/run/lucilogpos")) or 0 + local f=io.open("/tmp/AdGuardHome_update.log", "r+") + f:seek("set",fdp) + local a=f:read(2048000) or "" + fdp=f:seek() + fs.writefile("/var/run/lucilogpos",tostring(fdp)) + f:close() +if fs.access("/var/run/update_core") then + http.write(a) +else + http.write(a.."\0") +end +end diff --git a/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/base.lua b/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/base.lua new file mode 100755 index 000000000..6896b61ef --- /dev/null +++ b/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/base.lua @@ -0,0 +1,304 @@ +require("luci.sys") +require("luci.util") +require("io") +local m,s,o,o1 +local fs=require"nixio.fs" +local uci=require"luci.model.uci".cursor() +local configpath=uci:get("AdGuardHome","AdGuardHome","configpath") or "/etc/AdGuardHome.yaml" +local binpath=uci:get("AdGuardHome","AdGuardHome","binpath") or "/usr/bin/AdGuardHome" +httpport=uci:get("AdGuardHome","AdGuardHome","httpport") or "3000" +m = Map("AdGuardHome", "AdGuard Home") +m.description = translate("Free and open source, powerful network-wide ads & trackers blocking DNS server.") +m:section(SimpleSection).template = "AdGuardHome/AdGuardHome_status" + +s = m:section(TypedSection, "AdGuardHome") +s.anonymous=true +s.addremove=false +---- enable +o = s:option(Flag, "enabled", translate("Enable")) +o.default = 0 +o.optional = false +---- httpport +o =s:option(Value,"httpport",translate("Browser management port")) +o.placeholder=3000 +o.default=3000 +o.datatype="port" +o.optional = false +o.description = translate("") +---- update warning not safe +local binmtime=uci:get("AdGuardHome","AdGuardHome","binmtime") or "0" +local e="" +if not fs.access(configpath) then + e=e.." "..translate("no config") +end +if not fs.access(binpath) then + e=e.." "..translate("no core") +else + local version=uci:get("AdGuardHome","AdGuardHome","version") + local testtime=fs.stat(binpath,"mtime") + if testtime~=tonumber(binmtime) or version==nil then + local tmp=luci.sys.exec(binpath.." --version | grep -m 1 -E 'v[0-9.]+' -o ") + version=string.sub(tmp, 1) + if version=="" then version="core error" end + uci:set("AdGuardHome","AdGuardHome","version",version) + uci:set("AdGuardHome","AdGuardHome","binmtime",testtime) + uci:save("AdGuardHome") + end + e=version..e +end +o=s:option(Button,"restart",translate("Update")) +o.inputtitle=translate("Update core version") +o.template = "AdGuardHome/AdGuardHome_check" +o.showfastconfig=(not fs.access(configpath)) +o.description=string.format(translate("core version:").."%s ",e) +---- port warning not safe +local port=luci.sys.exec("awk '/ port:/{printf($2);exit;}' "..configpath.." 2>nul") +if (port=="") then port="?" end +---- Redirect +o = s:option(ListValue, "redirect", port..translate("Redirect"), translate("AdGuardHome redirect mode")) +o.placeholder = "none" +o:value("none", translate("none")) +o:value("dnsmasq-upstream", translate("Run as dnsmasq upstream server")) +o:value("redirect", translate("Redirect 53 port to AdGuardHome")) +o:value("exchange", translate("Use port 53 replace dnsmasq")) +o.default = "none" +o.optional = true +---- bin path +o = s:option(Value, "binpath", translate("Bin Path"), translate("AdGuardHome Bin path if no bin will auto download")) +o.default = "/usr/bin/AdGuardHome" +o.datatype = "string" +o.optional = false +o.rmempty=false +o.validate=function(self, value) +if value=="" then return nil end +if fs.stat(value,"type")=="dir" then + fs.rmdir(value) +end +if fs.stat(value,"type")=="dir" then + if (m.message) then + m.message =m.message.."\nerror!bin path is a dir" + else + m.message ="error!bin path is a dir" + end + return nil +end +return value +end +--- upx +o = s:option(ListValue, "upxflag", translate("use upx to compress bin after download")) +o:value("", translate("none")) +o:value("-1", translate("compress faster")) +o:value("-9", translate("compress better")) +o:value("--best", translate("compress best(can be slow for big files)")) +o:value("--brute", translate("try all available compression methods & filters [slow]")) +o:value("--ultra-brute", translate("try even more compression variants [very slow]")) +o.default = "" +o.description=translate("bin use less space,but may have compatibility issues") +o.rmempty = true +---- config path +o = s:option(Value, "configpath", translate("Config Path"), translate("AdGuardHome config path")) +o.default = "/etc/AdGuardHome.yaml" +o.datatype = "string" +o.optional = false +o.rmempty=false +o.validate=function(self, value) +if value==nil then return nil end +if fs.stat(value,"type")=="dir" then + fs.rmdir(value) +end +if fs.stat(value,"type")=="dir" then + if m.message then + m.message =m.message.."\nerror!config path is a dir" + else + m.message ="error!config path is a dir" + end + return nil +end +return value +end +---- work dir +o = s:option(Value, "workdir", translate("Work dir"), translate("AdGuardHome work dir include rules,audit log and database")) +o.default = "/etc/AdGuardHome" +o.datatype = "string" +o.optional = false +o.rmempty=false +o.validate=function(self, value) +if value=="" then return nil end +if fs.stat(value,"type")=="reg" then + if m.message then + m.message =m.message.."\nerror!work dir is a file" + else + m.message ="error!work dir is a file" + end + return nil +end +if string.sub(value, -1)=="/" then + return string.sub(value, 1, -2) +else + return value +end +end +---- log file +o = s:option(Value, "logfile", translate("Runtime log file"), translate("AdGuardHome runtime Log file if 'syslog': write to system log;if empty no log")) +o.datatype = "string" +o.rmempty = true +o.validate=function(self, value) +if fs.stat(value,"type")=="dir" then + fs.rmdir(value) +end +if fs.stat(value,"type")=="dir" then + if m.message then + m.message =m.message.."\nerror!log file is a dir" + else + m.message ="error!log file is a dir" + end + return nil +end +return value +end +---- debug +o = s:option(Flag, "verbose", translate("Verbose log")) +o.default = 0 +o.optional = true +---- gfwlist +local a=luci.sys.call("grep -m 1 -q programadd "..configpath) +if (a==0) then +a="Added" +else +a="Not added" +end +o=s:option(Button,"gfwdel",translate("Del gfwlist"),translate(a)) +o.optional = true +o.inputtitle=translate("Del") +o.write=function() + luci.sys.exec("sh /usr/share/AdGuardHome/gfw2adg.sh del 2>&1") + luci.http.redirect(luci.dispatcher.build_url("admin","services","AdGuardHome")) +end +o=s:option(Button,"gfwadd",translate("Add gfwlist"),translate(a)) +o.optional = true +o.inputtitle=translate("Add") +o.write=function() + luci.sys.exec("sh /usr/share/AdGuardHome/gfw2adg.sh 2>&1") + luci.http.redirect(luci.dispatcher.build_url("admin","services","AdGuardHome")) +end +o = s:option(Value, "gfwupstream", translate("Gfwlist upstream dns server"), translate("Gfwlist domain upstream dns service")..translate(a)) +o.default = "tcp://208.67.220.220:5353" +o.datatype = "string" +o.optional = true +---- chpass +o = s:option(Value, "hashpass", translate("Change browser management password"), translate("Press load culculate model and culculate finally save/apply")) +o.default = "" +o.datatype = "string" +o.template = "AdGuardHome/AdGuardHome_chpass" +o.optional = true +---- upgrade protect +o = s:option(MultiValue, "upprotect", translate("Keep files when system upgrade")) +o:value("$binpath",translate("core bin")) +o:value("$configpath",translate("config file")) +o:value("$logfile",translate("log file")) +o:value("$workdir/data/sessions.db",translate("sessions.db")) +o:value("$workdir/data/stats.db",translate("stats.db")) +o:value("$workdir/data/querylog.json",translate("querylog.json")) +o:value("$workdir/data/filters",translate("filters")) +o.widget = "checkbox" +o.default = nil +o.optional=true +---- wait net on boot +o = s:option(Flag, "waitonboot", translate("On boot when network ok restart")) +o.default = 1 +o.optional = true +---- backup workdir on shutdown +local workdir=uci:get("AdGuardHome","AdGuardHome","workdir") or "/etc/AdGuardHome" +o = s:option(MultiValue, "backupfile", translate("Backup workdir files when shutdown")) +o1 = s:option(Value, "backupwdpath", translate("Backup workdir path")) +local name +o:value("filters","filters") +o:value("stats.db","stats.db") +o:value("querylog.json","querylog.json") +o:value("sessions.db","sessions.db") +o1:depends ("backupfile", "filters") +o1:depends ("backupfile", "stats.db") +o1:depends ("backupfile", "querylog.json") +o1:depends ("backupfile", "sessions.db") +for name in fs.glob(workdir.."/data/*") +do + name=fs.basename (name) + if name~="filters" and name~="stats.db" and name~="querylog.json" and name~="sessions.db" then + o:value(name,name) + o1:depends ("backupfile", name) + end +end +o.widget = "checkbox" +o.default = nil +o.optional=false +o.description=translate("Will be restore when workdir/data is empty") +----backup workdir path + +o1.default = "/etc/AdGuardHome" +o1.datatype = "string" +o1.optional = false +o1.validate=function(self, value) +if fs.stat(value,"type")=="reg" then + if m.message then + m.message =m.message.."\nerror!backup dir is a file" + else + m.message ="error!backup dir is a file" + end + return nil +end +if string.sub(value,-1)=="/" then + return string.sub(value, 1, -2) +else + return value +end +end + +----Crontab +o = s:option(MultiValue, "crontab", translate("Crontab task"),translate("Please change time and args in crontab")) +o:value("autoupdate",translate("Auto update core")) +o:value("cutquerylog",translate("Auto tail querylog")) +o:value("cutruntimelog",translate("Auto tail runtime log")) +o:value("autohost",translate("Auto update ipv6 hosts and restart adh")) +o:value("autogfw",translate("Auto update gfwlist and restart adh")) +o.widget = "checkbox" +o.default = nil +o.optional=true + +----downloadpath +o = s:option(TextValue, "downloadlinks",translate("Download links for update")) +o.optional = false +o.rows = 4 +o.wrap = "soft" +o.cfgvalue = function(self, section) + return fs.readfile("/usr/share/AdGuardHome/links.txt") +end +o.write = function(self, section, value) + fs.writefile("/usr/share/AdGuardHome/links.txt", value:gsub("\r\n", "\n")) +end +fs.writefile("/var/run/lucilogpos","0") +function m.on_commit(map) + if (fs.access("/var/run/AdGserverdis")) then + io.popen("/etc/init.d/AdGuardHome reload &") + return + end + local ucitracktest=uci:get("AdGuardHome","AdGuardHome","ucitracktest") + if ucitracktest=="1" then + return + elseif ucitracktest=="0" then + io.popen("/etc/init.d/AdGuardHome reload &") + else + if (fs.access("/var/run/AdGlucitest")) then + uci:set("AdGuardHome","AdGuardHome","ucitracktest","0") + io.popen("/etc/init.d/AdGuardHome reload &") + else + fs.writefile("/var/run/AdGlucitest","") + if (ucitracktest=="2") then + uci:set("AdGuardHome","AdGuardHome","ucitracktest","1") + else + uci:set("AdGuardHome","AdGuardHome","ucitracktest","2") + end + end + uci:save("AdGuardHome") + end +end +return m diff --git a/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/log.lua b/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/log.lua new file mode 100755 index 000000000..5d18a88db --- /dev/null +++ b/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/log.lua @@ -0,0 +1,16 @@ +local fs=require"nixio.fs" +local uci=require"luci.model.uci".cursor() +local f,t +f=SimpleForm("logview") +f.reset = false +f.submit = false +t=f:field(TextValue,"conf") +t.rmempty=true +t.rows=20 +t.template="AdGuardHome/log" +t.readonly="readonly" +local logfile=uci:get("AdGuardHome","AdGuardHome","logfile") or "" +t.timereplace=(logfile~="syslog" and logfile~="" ) +t.pollcheck=logfile~="" +fs.writefile("/var/run/lucilogreload","") +return f diff --git a/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/manual.lua b/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/manual.lua new file mode 100755 index 000000000..ecf072bbc --- /dev/null +++ b/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/manual.lua @@ -0,0 +1,97 @@ +local m, s, o +local fs = require "nixio.fs" +local uci=require"luci.model.uci".cursor() +local sys=require"luci.sys" +require("string") +require("io") +require("table") +function gen_template_config() + local b + local d="" + for cnt in io.lines("/tmp/resolv.conf.d/resolv.conf.auto") do + b=string.match (cnt,"^[^#]*nameserver%s+([^%s]+)$") + if (b~=nil) then + d=d.." - "..b.."\n" + end + end + local f=io.open("/usr/share/AdGuardHome/AdGuardHome_template.yaml", "r+") + local tbl = {} + local a="" + while (1) do + a=f:read("*l") + if (a=="#bootstrap_dns") then + a=d + elseif (a=="#upstream_dns") then + a=d + elseif (a==nil) then + break + end + table.insert(tbl, a) + end + f:close() + return table.concat(tbl, "\n") +end +m = Map("AdGuardHome") +local configpath = uci:get("AdGuardHome","AdGuardHome","configpath") +local binpath = uci:get("AdGuardHome","AdGuardHome","binpath") +s = m:section(TypedSection, "AdGuardHome") +s.anonymous=true +s.addremove=false +--- config +o = s:option(TextValue, "escconf") +o.rows = 66 +o.wrap = "off" +o.rmempty = true +o.cfgvalue = function(self, section) + return fs.readfile("/tmp/AdGuardHometmpconfig.yaml") or fs.readfile(configpath) or gen_template_config() or "" +end +o.validate=function(self, value) + fs.writefile("/tmp/AdGuardHometmpconfig.yaml", value:gsub("\r\n", "\n")) + if fs.access(binpath) then + if (sys.call(binpath.." -c /tmp/AdGuardHometmpconfig.yaml --check-config 2> /tmp/AdGuardHometest.log")==0) then + return value + end + else + return value + end + luci.http.redirect(luci.dispatcher.build_url("admin","services","AdGuardHome","manual")) + return nil +end +o.write = function(self, section, value) + fs.move("/tmp/AdGuardHometmpconfig.yaml",configpath) +end +o.remove = function(self, section, value) + fs.writefile(configpath, "") +end +--- js and reload button +o = s:option(DummyValue, "") +o.anonymous=true +o.template = "AdGuardHome/yamleditor" +if not fs.access(binpath) then + o.description=translate("WARNING!!! no bin found apply config will not be test") +end +--- log +if (fs.access("/tmp/AdGuardHometmpconfig.yaml")) then +local c=fs.readfile("/tmp/AdGuardHometest.log") +if (c~="") then +o = s:option(TextValue, "") +o.readonly=true +o.rows = 5 +o.rmempty = true +o.name="" +o.cfgvalue = function(self, section) + return fs.readfile("/tmp/AdGuardHometest.log") +end +end +end +function m.on_commit(map) + local ucitracktest=uci:get("AdGuardHome","AdGuardHome","ucitracktest") + if ucitracktest=="1" then + return + elseif ucitracktest=="0" then + io.popen("/etc/init.d/AdGuardHome reload &") + else + fs.writefile("/var/run/AdGlucitest","") + end +end +return m diff --git a/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_check.htm b/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_check.htm new file mode 100755 index 000000000..832a1df46 --- /dev/null +++ b/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_check.htm @@ -0,0 +1,78 @@ +<%+cbi/valueheader%> +<%local fs=require"nixio.fs"%> + + +<% if self.showfastconfig then %> + +<%end%> + + +<%+cbi/valuefooter%> diff --git a/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_chpass.htm b/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_chpass.htm new file mode 100755 index 000000000..b6ff3ebb3 --- /dev/null +++ b/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_chpass.htm @@ -0,0 +1,49 @@ +<%+cbi/valueheader%> + + 0, "data-choices", { self.keylist, self.vallist }) + %> /> + <% if self.password then %><% end %> + +<%+cbi/valuefooter%> diff --git a/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_status.htm b/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_status.htm new file mode 100755 index 000000000..7e924d119 --- /dev/null +++ b/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_status.htm @@ -0,0 +1,27 @@ + + +
+

+ <%:Collecting data...%> +

+
\ No newline at end of file diff --git a/luci-app-adguardhome/luasrc/view/AdGuardHome/log.htm b/luci-app-adguardhome/luasrc/view/AdGuardHome/log.htm new file mode 100755 index 000000000..11a1f787a --- /dev/null +++ b/luci-app-adguardhome/luasrc/view/AdGuardHome/log.htm @@ -0,0 +1,111 @@ +<%+cbi/valueheader%> +<%:reverse%> +<%if self.timereplace then%> +<%:localtime%>
+<%end%> + + + + +<%+cbi/valuefooter%> diff --git a/luci-app-adguardhome/luasrc/view/AdGuardHome/yamleditor.htm b/luci-app-adguardhome/luasrc/view/AdGuardHome/yamleditor.htm new file mode 100755 index 000000000..639cb9988 --- /dev/null +++ b/luci-app-adguardhome/luasrc/view/AdGuardHome/yamleditor.htm @@ -0,0 +1,39 @@ +<%+cbi/valueheader%> + + + + + + + + + +<%fs=require"nixio.fs"%> +<%if fs.access("/tmp/AdGuardHometmpconfig.yaml") then%> + +<%end%> + +<%+cbi/valuefooter%> \ No newline at end of file diff --git a/luci-app-adguardhome/po/zh-cn b/luci-app-adguardhome/po/zh-cn new file mode 100755 index 000000000..8d69574dd --- /dev/null +++ b/luci-app-adguardhome/po/zh-cn @@ -0,0 +1 @@ +zh_Hans \ No newline at end of file diff --git a/luci-app-adguardhome/po/zh_Hans/adguardhome.po b/luci-app-adguardhome/po/zh_Hans/adguardhome.po new file mode 100755 index 000000000..0ace89bae --- /dev/null +++ b/luci-app-adguardhome/po/zh_Hans/adguardhome.po @@ -0,0 +1,408 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: zh_Hans\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /mnt/A/openwrt-latest/package/ctcgfw/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/base.lua:27 +msgid "" +"/dev/null 2>&1 + if [ $? -eq 0 ]; then + return + fi + uci delete dhcp.@dnsmasq[0].server 2>/dev/null + uci add_list dhcp.@dnsmasq[0].server=$addr + for server in $OLD_SERVER; do + if [ "$server" = "$addr" ]; then + continue + fi + # uci add_list dhcp.@dnsmasq[0].server=$server + done + uci delete dhcp.@dnsmasq[0].resolvfile 2>/dev/null + uci set dhcp.@dnsmasq[0].noresolv=1 + uci commit dhcp + /etc/init.d/dnsmasq restart +} + +stop_forward_dnsmasq() +{ + local OLD_PORT="$1" + addr="127.0.0.1#$OLD_PORT" + OLD_SERVER="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`" + echo $OLD_SERVER | grep "^$addr" >/dev/null 2>&1 + if [ $? -ne 0 ]; then + return + fi + + uci del_list dhcp.@dnsmasq[0].server=$addr 2>/dev/null + addrlist="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`" + if [ -z "$addrlist" ] ; then + uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.d/resolv.conf.auto 2>/dev/null + uci delete dhcp.@dnsmasq[0].noresolv 2>/dev/null + fi + uci commit dhcp + /etc/init.d/dnsmasq restart +} + +set_iptable() +{ + local ipv6_server=$1 + local tcp_server=$2 + uci -q batch <<-EOF >/dev/null 2>&1 + delete firewall.AdGuardHome + set firewall.AdGuardHome=include + set firewall.AdGuardHome.type=script + set firewall.AdGuardHome.path=/usr/share/AdGuardHome/firewall.start + set firewall.AdGuardHome.reload=1 + commit firewall +EOF + + IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`" + for IP in $IPS + do + if [ "$tcp_server" == "1" ]; then + iptables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1 + fi + iptables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1 + done + + if [ "$ipv6_server" == 0 ]; then + return + fi + + IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`" + for IP in $IPS + do + if [ "$tcp_server" == "1" ]; then + ip6tables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1 + fi + ip6tables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1 + done +} + +clear_iptable() +{ + uci -q batch <<-EOF >/dev/null 2>&1 + delete firewall.AdGuardHome + commit firewall +EOF + local OLD_PORT="$1" + local ipv6_server=$2 + IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`" + for IP in $IPS + do + iptables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1 + iptables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1 + done + + if [ "$ipv6_server" == 0 ]; then + return + fi + echo "warn ip6tables nat mod is needed" + IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`" + for IP in $IPS + do + ip6tables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1 + ip6tables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1 + done +} + +service_triggers() { + procd_add_reload_trigger "$CONFIGURATION" + [ "$(uci get AdGuardHome.AdGuardHome.redirect)" == "redirect" ] && procd_add_reload_trigger firewall +} + +isrunning(){ + config_load "${CONFIGURATION}" + _isrunning + local r=$? + ([ "$r" == "0" ] && echo "running") || ([ "$r" == "1" ] && echo "not run" ) || echo "no bin" + return $r +} + +_isrunning(){ + config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome" + [ ! -f "$binpath" ] && return 2 + pgrep $binpath 2>&1 >/dev/null && return 0 + return 1 +} + +force_reload(){ + config_load "${CONFIGURATION}" + _isrunning && procd_send_signal "$CONFIGURATION" || start +} + +get_tz() +{ + SET_TZ="" + + if [ -e "/etc/localtime" ]; then + return + fi + + for tzfile in /etc/TZ /var/etc/TZ + do + if [ ! -e "$tzfile" ]; then + continue + fi + + tz="`cat $tzfile 2>/dev/null`" + done + + if [ -z "$tz" ]; then + return + fi + + SET_TZ=$tz +} + +rm_port53() +{ + local AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1") + dnsmasq_port=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null) + if [ -z "$dnsmasq_port" ]; then + dnsmasq_port="53" + fi + if [ "$dnsmasq_port" == "$AdGuardHome_PORT" ]; then + if [ "$dnsmasq_port" == "53" ]; then + dnsmasq_port="1745" + fi + elif [ "$dnsmasq_port" == "53" ]; then + return + fi + config_editor "dns.port" "$dnsmasq_port" "$configpath" + uci set dhcp.@dnsmasq[0].port="53" + uci commit dhcp + config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome" + killall -9 $binpath + /etc/init.d/dnsmasq restart +} + +use_port53() +{ + local AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1") + dnsmasq_port=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null) + if [ -z "$dnsmasq_port" ]; then + dnsmasq_port="53" + fi + if [ "$dnsmasq_port" == "$AdGuardHome_PORT" ]; then + if [ "$dnsmasq_port" == "53" ]; then + AdGuardHome_PORT="1745" + fi + elif [ "$AdGuardHome_PORT" == "53" ]; then + return + fi + config_editor "dns.port" "53" "$configpath" + uci set dhcp.@dnsmasq[0].port="$AdGuardHome_PORT" + uci commit dhcp + /etc/init.d/dnsmasq reload +} + +do_redirect() +{ + config_load "${CONFIGURATION}" + _do_redirect $1 +} + +_do_redirect() +{ + local section="$CONFIGURATION" + args="" + ipv6_server=1 + tcp_server=0 + enabled=$1 + if [ "$enabled" == "1" ]; then + echo -n "1">/var/run/AdGredir + else + echo -n "0">/var/run/AdGredir + fi + config_get configpath $CONFIGURATION configpath "/etc/AdGuardHome.yaml" + AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1") + if [ ! -s "$configpath" ]; then + cp -f /usr/share/AdGuardHome/AdGuardHome_template.yaml $configpath + fi + if [ -z "$AdGuardHome_PORT" ]; then + AdGuardHome_PORT="0" + fi + config_get "redirect" "$section" "redirect" "none" + config_get "old_redirect" "$section" "old_redirect" "none" + config_get "old_port" "$section" "old_port" "0" + config_get "old_enabled" "$section" "old_enabled" "0" + uci get dhcp.@dnsmasq[0].port >/dev/null 2>&1 || uci set dhcp.@dnsmasq[0].port="53" >/dev/null 2>&1 + if [ "$old_enabled" = "1" -a "$old_redirect" == "exchange" ]; then + AdGuardHome_PORT=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null) + fi + + if [ "$old_redirect" != "$redirect" ] || [ "$old_port" != "$AdGuardHome_PORT" ] || [ "$old_enabled" = "1" -a "$enabled" = "0" ]; then + if [ "$old_redirect" != "none" ]; then + if [ "$old_redirect" == "redirect" -a "$old_port" != "0" ]; then + clear_iptable "$old_port" "$ipv6_server" + elif [ "$old_redirect" == "dnsmasq-upstream" ]; then + stop_forward_dnsmasq "$old_port" + elif [ "$old_redirect" == "exchange" ]; then + rm_port53 + fi + fi + elif [ "$old_enabled" = "1" -a "$enabled" = "1" ]; then + if [ "$old_redirect" == "redirect" -a "$old_port" != "0" ]; then + clear_iptable "$old_port" "$ipv6_server" + fi + fi + uci delete AdGuardHome.@AdGuardHome[0].old_redirect 2>/dev/null + uci delete AdGuardHome.@AdGuardHome[0].old_port 2>/dev/null + uci delete AdGuardHome.@AdGuardHome[0].old_enabled 2>/dev/null + uci add_list AdGuardHome.@AdGuardHome[0].old_redirect="$redirect" 2>/dev/null + uci add_list AdGuardHome.@AdGuardHome[0].old_port="$AdGuardHome_PORT" 2>/dev/null + uci add_list AdGuardHome.@AdGuardHome[0].old_enabled="$enabled" 2>/dev/null + uci commit AdGuardHome + [ "$enabled" == "0" ] && return 1 + if [ "$AdGuardHome_PORT" == "0" ]; then + return 1 + fi + if [ "$redirect" = "redirect" ]; then + set_iptable $ipv6_server $tcp_server + elif [ "$redirect" = "dnsmasq-upstream" ]; then + set_forward_dnsmasq "$AdGuardHome_PORT" + elif [ "$redirect" == "exchange" -a "$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)" == "53" ]; then + use_port53 + fi +} + +get_filesystem() +{ +# print out path filesystem + echo $1 | awk ' + BEGIN{ + while (("mount"| getline ret) > 0) + { + split(ret,d); + fs[d[3]]=d[5]; + m=index(d[1],":") + if (m==0) + { + pt[d[3]]=d[1] + }else{ + pt[d[3]]=substr(d[1],m+1) + }}}{ + split($0,d,"/"); + if ("/" in fs) + { + result1=fs["/"]; + } + if ("/" in pt) + { + result2=pt["/"]; + } + for (i=2;i<=length(d);i++) + { + p[i]=p[i-1]"/"d[i]; + if (p[i] in fs) + { + result1=fs[p[i]]; + result2=pt[p[i]]; + } + } + if (result2 in fs){ + result=fs[result2]} + else{ + result=result1} + print(result);}' +} + +config_editor() +{ + awk -v yaml="$1" -v value="$2" -v file="$3" -v ro="$4" ' + BEGIN{split(yaml,part,"\.");s="";i=1;l=length(part);} + { + if (match($0,s""part[i]":")) + { + if (i==l) + { + split($0,t,": "); + if (ro==""){ + system("sed -i '\''"FNR"c \\"t[1]": "value"'\'' "file); + }else{ + print(t[2]); + } + exit; + } + s=s"[- ]{2}"; + i++; + } + }' $3 +} + +boot_service() { + rm /var/run/AdGserverdis >/dev/null 2>&1 + config_load "${CONFIGURATION}" + config_get waitonboot $CONFIGURATION waitonboot "0" + config_get_bool enabled $CONFIGURATION enabled 0 + config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome" + [ -f "$binpath" ] && start_service + if [ "$enabled" == "1" ] && [ "$waitonboot" == "1" ]; then + procd_open_instance "waitnet" + procd_set_param command "/usr/share/AdGuardHome/waitnet.sh" + procd_close_instance + echo "no net start pinging" + fi +} + +testbackup(){ + config_load "${CONFIGURATION}" + if [ "$1" == "backup" ]; then + backup + elif [ "$1" == "restore" ]; then + restore + fi +} + +restore() +{ + config_get workdir $CONFIGURATION workdir "/etc/AdGuardHome" + config_get backupwdpath $CONFIGURATION backupwdpath "/etc/AdGuardHome" + cp -u -r -f $backupwdpath/data $workdir +} + +backup() { + config_get backupwdpath $CONFIGURATION backupwdpath "/etc/AdGuardHome" + mkdir -p $backupwdpath/data + config_get workdir $CONFIGURATION workdir "/etc/AdGuardHome" + config_get backupfile $CONFIGURATION backupfile "" + for one in $backupfile; + do + while : + do + if [ -d "$backupwdpath/data/$one" ]; then + cpret=$(cp -u -r -f $workdir/data/$one $backupwdpath/data 2>&1) + else + cpret=$(cp -u -r -f $workdir/data/$one $backupwdpath/data/$one 2>&1) + fi + echo "$cpret" + echo "$cpret" | grep "no space left on device" + if [ "$?" == "0" ]; then + echo "磁盘已满,删除log重试中" + del_querylog && continue + rm -f -r $backupwdpath/data/filters + rm -f -r $workdir/data/filters && continue + echo "backup failed" + fi + break + done + done +} + +start_service() { + # Reading config + rm /var/run/AdGserverdis >/dev/null 2>&1 + config_load "${CONFIGURATION}" + # update password + config_get hashpass $CONFIGURATION hashpass "" + config_get configpath $CONFIGURATION configpath "/etc/AdGuardHome.yaml" + if [ -n "$hashpass" ]; then + config_editor "users.password" "$hashpass" "$configpath" + uci set $CONFIGURATION.$CONFIGURATION.hashpass="" + fi + local enabled + config_get_bool enabled $CONFIGURATION enabled 0 + # update crontab + do_crontab + if [ "$enabled" == "0" ]; then + _do_redirect 0 + return + fi + #what need to do before reload + config_get workdir $CONFIGURATION workdir "/etc/AdGuardHome" + + config_get backupfile $CONFIGURATION backupfile "" + mkdir -p $workdir/data + if [ -n "$backupfile" ] && [ ! -d "$workdir/data" ]; then + restore + fi + # for overlay data-stk-oo not suppport + local cwdfs=$(get_filesystem $workdir) + echo "workdir is a $cwdfs filesystem" + if [ "$cwdfs" == "jffs2" ]; then + echo "fs error ln db to tmp $workdir $cwdfs" + logger "AdGuardHome" "warning db redirect to tmp" + touch $workdir/data/stats.db + if [ ! -L $workdir/data/stats.db ]; then + mv -f $workdir/data/stats.db /tmp/stats.db 2>/dev/null + ln -s /tmp/stats.db $workdir/data/stats.db 2>/dev/null + fi + touch $workdir/data/sessions.db + if [ ! -L $workdir/data/sessions.db ]; then + mv -f $workdir/data/sessions.db /tmp/sessions.db 2>/dev/null + ln -s /tmp/sessions.db $workdir/data/sessions.db 2>/dev/null + fi + fi + local ADDITIONAL_ARGS="" + config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome" + + mkdir -p ${binpath%/*} + ADDITIONAL_ARGS="$ADDITIONAL_ARGS -c $configpath" + ADDITIONAL_ARGS="$ADDITIONAL_ARGS -w $workdir" + config_get httpport $CONFIGURATION httpport 3000 + ADDITIONAL_ARGS="$ADDITIONAL_ARGS -p $httpport" + + # hack to save config file when upgrade system + config_get upprotect $CONFIGURATION upprotect "" + eval upprotect=${upprotect// /\\\\n} + echo -e "$upprotect">/lib/upgrade/keep.d/luci-app-adguardhome + + config_get logfile $CONFIGURATION logfile "" + if [ -n "$logfile" ]; then + ADDITIONAL_ARGS="$ADDITIONAL_ARGS -l $logfile" + fi + + if [ ! -f "$binpath" ]; then + _do_redirect 0 + /usr/share/AdGuardHome/update_core.sh 2>&1 >/tmp/AdGuardHome_update.log & + exit 0 + fi + + config_get_bool verbose $CONFIGURATION verbose 0 + if [ "$verbose" -eq 1 ]; then + ADDITIONAL_ARGS="$ADDITIONAL_ARGS -v" + fi + + procd_open_instance + get_tz + if [ -n "$SET_TZ" ]; then + procd_set_param env TZ="$SET_TZ" + fi + procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5} + procd_set_param limits core="unlimited" nofile="65535 65535" + procd_set_param stderr 1 + procd_set_param command $binpath $ADDITIONAL_ARGS + procd_set_param file "$configpath" "/etc/hosts" "/etc/config/AdGuardHome" + procd_close_instance + if [ -f "$configpath" ]; then + _do_redirect 1 + else + _do_redirect 0 + config_get "redirect" "AdGuardHome" "redirect" "none" + if [ "$redirect" != "none" ]; then + procd_open_instance "waitconfig" + procd_set_param command "/usr/share/AdGuardHome/watchconfig.sh" + procd_close_instance + echo "no config start watching" + fi + fi + echo "AdGuardHome service enabled" + echo "luci enable switch=$enabled" + (sleep 10 && [ -z "$(pgrep $binpath)" ] && logger "AdGuardHome" "no process in 10s cancel redirect" && _do_redirect 0 )& + if [[ "`uci get bypass.@global[0].global_server 2>/dev/null`" && "`uci get bypass.@global[0].adguardhome 2>/dev/null`" == 1 && "$(uci get dhcp.@dnsmasq[0].port)" == "53" ]]; then + uci -q set AdGuardHome.AdGuardHome.redirect='exchange' + uci commit AdGuardHome + do_redirect 1 + fi +} + +reload_service() +{ + rm /var/run/AdGlucitest >/dev/null 2>&1 + echo "AdGuardHome reloading" + start +} + +del_querylog(){ + local btarget=$(ls $backupwdpath/data | grep -F "querylog.json" | sort -r | head -n 1) + local wtarget=$(ls $workdir/data | grep -F "querylog.json" | sort -r | head -n 1) + if [ "$btarget"x == "$wtarget"x ]; then + [ -z "$btarget" ] && return 1 + rm -f $workdir/data/$wtarget + rm -f $backupwdpath/data/$btarget + return 0 + fi + if [ "$btarget" \> "$wtarget" ]; then + rm -f $backupwdpath/data/$btarget + return 0 + else + rm -f $workdir/data/$wtarget + return 0 + fi +} + +stop_service() +{ + config_load "${CONFIGURATION}" + _do_redirect 0 + do_crontab + if [ "$1" != "nobackup" ]; then + config_get backupfile $CONFIGURATION backupfile "0" + if [ -n "$backupfile" ]; then + backup + fi + fi + echo "AdGuardHome service disabled" + touch /var/run/AdGserverdis +} + +boot() { + rc_procd boot_service "$@" + if eval "type service_started" 2>/dev/null >/dev/null; then + service_started + fi +} + +test_crontab(){ + config_load "${CONFIGURATION}" + do_crontab +} + +do_crontab(){ + config_get_bool enabled $CONFIGURATION enabled 0 + config_get crontab $CONFIGURATION crontab "" + local findstr default cronenable replace commit + local cronreload=0 + local commit=0 + findstr="/usr/share/AdGuardHome/update_core.sh" + default="30 3 * * * /usr/share/AdGuardHome/update_core.sh 2>&1" + [ "$enabled" == "0" ] || [ "${crontab//autoupdate/}" == "$crontab" ] && cronenable=0 || cronenable=1 + crontab_editor + + config_get workdir $CONFIGURATION workdir "/etc/AdGuardHome" + config_get lastworkdir $CONFIGURATION lastworkdir "/etc/AdGuardHome" + findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* \$(uci get AdGuardHome.AdGuardHome.workdir)/data/querylog.json" + #[ -n "$lastworkdir" ] && findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* $lastworkdir/data/querylog.json" && [ "$lastworkdir" != "$workdir" ] && replace="${lastworkdir//\//\\/}/${workdir//\//\\/}" + default="0 * * * * /usr/share/AdGuardHome/tailto.sh 2000 \$(uci get AdGuardHome.AdGuardHome.workdir)/data/querylog.json" + [ "$enabled" == "0" ] || [ "${crontab//cutquerylog/}" == "$crontab" ] && cronenable=0 || cronenable=1 + crontab_editor + #[ "$lastworkdir" != "$workdir" ] && uci set AdGuardHome.AdGuardHome.lastworkdir="$workdir" && commit=1 + + config_get logfile $CONFIGURATION logfile "" + config_get lastlogfile $CONFIGURATION lastlogfile "" + findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* \$(uci get AdGuardHome.AdGuardHome.logfile)" + default="30 3 * * * /usr/share/AdGuardHome/tailto.sh 2000 \$(uci get AdGuardHome.AdGuardHome.logfile)" + #[ -n "$lastlogfile" ] && findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* $lastlogfile" && [ -n "$logfile" ] && [ "$lastlogfile" != "$logfile" ] && replace="${lastlogfile//\//\\/}/${logfile//\//\\/}" + [ "$logfile" == "syslog" ] || [ "$logfile" == "" ] || [ "$enabled" == "0" ] || [ "${crontab//cutruntimelog/}" == "$crontab" ] && cronenable=0 || cronenable=1 + crontab_editor + #[ -n "$logfile" ] && [ "$lastlogfile" != "$logfile" ] && uci set AdGuardHome.AdGuardHome.lastlogfile="$logfile" && commit=1 + + findstr="/usr/share/AdGuardHome/addhost.sh" + default="0 * * * * /usr/share/AdGuardHome/addhost.sh" + [ "$enabled" == "0" ] || [ "${crontab//autohost/}" == "$crontab" ] && cronenable=0 || cronenable=1 + crontab_editor + [ "$cronenable" == "0" ] && /usr/share/AdGuardHome/addhost.sh "del" "noreload" || /usr/share/AdGuardHome/addhost.sh "" "noreload" + + findstr="/usr/share/AdGuardHome/gfw2adg.sh" + default="30 3 * * * /usr/share/AdGuardHome/gfw2adg.sh" + [ "$enabled" == "0" ] || [ "${crontab//autogfw/}" == "$crontab" ] && cronenable=0 || cronenable=1 + crontab_editor + [ "$cronreload" -gt 0 ] && /etc/init.d/cron restart + #[ "$commit" -gt 0 ] && uci commit AdGuardHome +} + +crontab_editor(){ + #usage input: + #findstr= + #default= + #cronenable= + #replace="${last//\//\\/}/${now//\//\\/}" + #output:cronreload:if >1 please /etc/init.d/cron restart manual + local testline reload + local line="$(grep "$findstr" $CRON_FILE)" + [ -n "$replace" ] && [ -n "$line" ] && eval testline="\${line//$replace}" && [ "$testline" != "$line" ] && line="$testline" && reload="1" && replace="" + if [ "${line:0:1}" != "#" ]; then + if [ $cronenable -eq 1 ]; then + [ -z "$line" ] && line="$default" && reload="1" + if [ -n "$reload" ]; then + sed -i "\,$findstr,d" $CRON_FILE + echo "$line" >> $CRON_FILE + cronreload=$((cronreload+1)) + fi + elif [ -n "$line" ]; then + sed -i "\,$findstr,d" $CRON_FILE + echo "#$line" >> $CRON_FILE + cronreload=$((cronreload+1)) + fi + else + if [ $cronenable -eq 1 ]; then + sed -i "\,$findstr,d" $CRON_FILE + echo "${line:1}" >> $CRON_FILE + cronreload=$((cronreload+1)) + elif [ -z "$reload" ]; then + sed -i "\,$findstr,d" $CRON_FILE + echo "$line" >> $CRON_FILE + fi + fi +} diff --git a/luci-app-adguardhome/root/etc/uci-defaults/40_luci-AdGuardHome b/luci-app-adguardhome/root/etc/uci-defaults/40_luci-AdGuardHome new file mode 100755 index 000000000..37e192cdd --- /dev/null +++ b/luci-app-adguardhome/root/etc/uci-defaults/40_luci-AdGuardHome @@ -0,0 +1,15 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null 2>&1 + delete ucitrack.@AdGuardHome[-1] + add ucitrack AdGuardHome + set ucitrack.@AdGuardHome[-1].init=AdGuardHome + commit ucitrack + delete AdGuardHome.AdGuardHome.ucitracktest + /etc/init.d/AdGuardHome restart +EOF + +rm -f /tmp/luci-indexcache + +chmod +x /etc/init.d/AdGuardHome /usr/share/AdGuardHome/* +exit 0 diff --git a/luci-app-adguardhome/root/usr/share/AdGuardHome/AdGuardHome_template.yaml b/luci-app-adguardhome/root/usr/share/AdGuardHome/AdGuardHome_template.yaml new file mode 100755 index 000000000..612a57706 --- /dev/null +++ b/luci-app-adguardhome/root/usr/share/AdGuardHome/AdGuardHome_template.yaml @@ -0,0 +1,131 @@ +bind_host: 0.0.0.0 +bind_port: 3000 +beta_bind_port: 0 +users: +- name: root + password: $2y$10$dwn0hTYoECQMZETBErGlzOId2VANOVsPHsuH13TM/8KnysM5Dh/ve +auth_attempts: 5 +block_auth_min: 15 +http_proxy: "" +language: zh-cn +debug_pprof: false +web_session_ttl: 720 +dns: + bind_hosts: + - 0.0.0.0 + port: 1745 + statistics_interval: 30 + querylog_enabled: true + querylog_file_enabled: true + querylog_interval: 6h + querylog_size_memory: 1000 + anonymize_client_ip: false + protection_enabled: true + blocking_mode: default + blocking_ipv4: "" + blocking_ipv6: "" + blocked_response_ttl: 60 + parental_block_host: family-block.dns.adguard.com + safebrowsing_block_host: standard-block.dns.adguard.com + ratelimit: 0 + ratelimit_whitelist: [] + refuse_any: false + upstream_dns: + - 223.5.5.5 + upstream_dns_file: "" + bootstrap_dns: + - 119.29.29.29 + - 223.5.5.5 + all_servers: false + fastest_addr: false + fastest_timeout: 1s + allowed_clients: [] + disallowed_clients: [] + blocked_hosts: + - version.bind + - id.server + - hostname.bind + trusted_proxies: + - 127.0.0.0/8 + - ::1/128 + cache_size: 4194304 + cache_ttl_min: 0 + cache_ttl_max: 0 + cache_optimistic: true + bogus_nxdomain: [] + aaaa_disabled: false + enable_dnssec: false + edns_client_subnet: false + max_goroutines: 300 + ipset: [] + filtering_enabled: true + filters_update_interval: 24 + parental_enabled: false + safesearch_enabled: false + safebrowsing_enabled: false + safebrowsing_cache_size: 1048576 + safesearch_cache_size: 1048576 + parental_cache_size: 1048576 + cache_time: 30 + rewrites: [] + blocked_services: [] + upstream_timeout: 10s + local_domain_name: lan + resolve_clients: true + use_private_ptr_resolvers: true + local_ptr_upstreams: [] +tls: + enabled: false + server_name: "" + force_https: false + port_https: 443 + port_dns_over_tls: 853 + port_dns_over_quic: 784 + port_dnscrypt: 0 + dnscrypt_config_file: "" + allow_unencrypted_doh: false + strict_sni_check: false + certificate_chain: "" + private_key: "" + certificate_path: "" + private_key_path: "" +filters: +- enabled: true + url: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt + name: AdGuard DNS filter + id: 1628750870 +- enabled: true + url: https://anti-ad.net/easylist.txt + name: 'CHN: anti-AD' + id: 1628750871 +whitelist_filters: [] +user_rules: [] +dhcp: + enabled: false + interface_name: "" + dhcpv4: + gateway_ip: "" + subnet_mask: "" + range_start: "" + range_end: "" + lease_duration: 86400 + icmp_timeout_msec: 1000 + options: [] + dhcpv6: + range_start: "" + lease_duration: 86400 + ra_slaac_only: false + ra_allow_slaac: false +clients: [] +log_compress: false +log_localtime: false +log_max_backups: 0 +log_max_size: 100 +log_max_age: 3 +log_file: "" +verbose: false +os: + group: "" + user: "" + rlimit_nofile: 0 +schema_version: 12 diff --git a/luci-app-adguardhome/root/usr/share/AdGuardHome/addhost.sh b/luci-app-adguardhome/root/usr/share/AdGuardHome/addhost.sh new file mode 100755 index 000000000..6c6b7b769 --- /dev/null +++ b/luci-app-adguardhome/root/usr/share/AdGuardHome/addhost.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +checkmd5(){ +local nowmd5=$(md5sum /etc/hosts) +nowmd5=${nowmd5%% *} +local lastmd5=$(uci get AdGuardHome.AdGuardHome.hostsmd5 2>/dev/null) +if [ "$nowmd5" != "$lastmd5" ]; then + uci set AdGuardHome.AdGuardHome.hostsmd5="$nowmd5" + uci commit AdGuardHome + [ "$1" == "noreload" ] || /etc/init.d/AdGuardHome reload +fi +} + +[ "$1" == "del" ] && sed -i '/programaddstart/,/programaddend/d' /etc/hosts && checkmd5 "$2" && exit 0 +/usr/bin/awk 'BEGIN{ +while ((getline < "/tmp/dhcp.leases") > 0) +{ + a[$2]=$4; +} +while (("ip -6 neighbor show | grep -v fe80" | getline) > 0) +{ + if (a[$5]) {print $1" "a[$5] >"/tmp/tmphost"; } +} +print "#programaddend" >"/tmp/tmphost"; +}' +grep programaddstart /etc/hosts >/dev/null 2>&1 +if [ "$?" == "0" ]; then + sed -i '/programaddstart/,/programaddend/c\#programaddstart' /etc/hosts + sed -i '/programaddstart/'r/tmp/tmphost /etc/hosts +else + echo "#programaddstart" >>/etc/hosts + cat /tmp/tmphost >> /etc/hosts +fi +rm /tmp/tmphost +checkmd5 "$2" diff --git a/luci-app-adguardhome/root/usr/share/AdGuardHome/firewall.start b/luci-app-adguardhome/root/usr/share/AdGuardHome/firewall.start new file mode 100755 index 000000000..562117e52 --- /dev/null +++ b/luci-app-adguardhome/root/usr/share/AdGuardHome/firewall.start @@ -0,0 +1,8 @@ +#!/bin/sh + +AdGuardHome_enable=$(uci get AdGuardHome.AdGuardHome.enabled) +redirect=$(uci get AdGuardHome.AdGuardHome.redirect) + +if [ $AdGuardHome_enable -eq 1 -a "$redirect" == "redirect" ]; then + /etc/init.d/AdGuardHome do_redirect 1 +fi diff --git a/luci-app-adguardhome/root/usr/share/AdGuardHome/getsyslog.sh b/luci-app-adguardhome/root/usr/share/AdGuardHome/getsyslog.sh new file mode 100755 index 000000000..908bdf631 --- /dev/null +++ b/luci-app-adguardhome/root/usr/share/AdGuardHome/getsyslog.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +PATH="/usr/sbin:/usr/bin:/sbin:/bin" +logread -e AdGuardHome > /tmp/AdGuardHometmp.log +logread -e AdGuardHome -f >> /tmp/AdGuardHometmp.log & +pid=$! +echo "1">/var/run/AdGuardHomesyslog +while true +do + sleep 12 + watchdog=$(cat /var/run/AdGuardHomesyslog) + if [ "$watchdog"x == "0"x ]; then + kill $pid + rm /tmp/AdGuardHometmp.log + rm /var/run/AdGuardHomesyslog + exit 0 + else + echo "0">/var/run/AdGuardHomesyslog + fi +done diff --git a/luci-app-adguardhome/root/usr/share/AdGuardHome/gfw2adg.sh b/luci-app-adguardhome/root/usr/share/AdGuardHome/gfw2adg.sh new file mode 100755 index 000000000..a3add84e8 --- /dev/null +++ b/luci-app-adguardhome/root/usr/share/AdGuardHome/gfw2adg.sh @@ -0,0 +1,89 @@ +#!/bin/sh + +PATH="/usr/sbin:/usr/bin:/sbin:/bin" + +checkmd5(){ +local nowmd5=$(md5sum /tmp/adguard.list 2>/dev/null) +nowmd5=${nowmd5%% *} +local lastmd5=$(uci get AdGuardHome.AdGuardHome.gfwlistmd5 2>/dev/null) +if [ "$nowmd5" != "$lastmd5" ]; then + uci set AdGuardHome.AdGuardHome.gfwlistmd5="$nowmd5" + uci commit AdGuardHome + [ "$1" == "noreload" ] || /etc/init.d/AdGuardHome reload +fi +} + +configpath=$(uci get AdGuardHome.AdGuardHome.configpath 2>/dev/null) +[ "$1" == "del" ] && sed -i '/programaddstart/,/programaddend/d' $configpath && checkmd5 "$2" && exit 0 +gfwupstream=$(uci get AdGuardHome.AdGuardHome.gfwupstream 2>/dev/null) +if [ -z $gfwupstream ]; then +gfwupstream="tcp://208.67.220.220:5353" +fi +if [ ! -f "$configpath" ]; then + echo "please make a config first" + exit 1 +fi +wget-ssl --no-check-certificate https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt -O- | base64 -d > /tmp/gfwlist.txt +cat /tmp/gfwlist.txt | awk -v upst="$gfwupstream" 'BEGIN{getline;}{ +s1=substr($0,1,1); +if (s1=="!") +{next;} +if (s1=="@"){ + $0=substr($0,3); + s1=substr($0,1,1); + white=1;} +else{ + white=0; +} + +if (s1=="|") + {s2=substr($0,2,1); + if (s2=="|") + { + $0=substr($0,3); + split($0,d,"/"); + $0=d[1]; + }else{ + split($0,d,"/"); + $0=d[3]; + }} +else{ + split($0,d,"/"); + $0=d[1]; +} +star=index($0,"*"); +if (star!=0) +{ + $0=substr($0,star+1); + dot=index($0,"."); + if (dot!=0) + $0=substr($0,dot+1); + else + next; + s1=substr($0,1,1); +} +if (s1==".") +{fin=substr($0,2);} +else{fin=$0;} +if (index(fin,".")==0) next; +if (index(fin,"%")!=0) next; +if (index(fin,":")!=0) next; +match(fin,"^[0-9\.]+") +if (RSTART==1 && RLENGTH==length(fin)) {print "ipset add gfwlist "fin>"/tmp/doipset.sh";next;} +if (fin=="" || finl==fin) next; +finl=fin; +if (white==0) + {print(" - '\''[/"fin"/]"upst"'\''");} +else{ + print(" - '\''[/"fin"/]#'\''");} +}END{print(" - '\''[/programaddend/]#'\''")}' > /tmp/adguard.list +grep programaddstart $configpath +if [ "$?" == "0" ]; then + sed -i '/programaddstart/,/programaddend/c\ - '\''\[\/programaddstart\/\]#'\''' $configpath + sed -i '/programaddstart/'r/tmp/adguard.list $configpath +else + sed -i '1i\ - '\''[/programaddstart/]#'\''' /tmp/adguard.list + sed -i '/upstream_dns:/'r/tmp/adguard.list $configpath +fi +checkmd5 "$2" +rm -f /tmp/gfwlist.txt /tmp/adguard.list diff --git a/luci-app-adguardhome/root/usr/share/AdGuardHome/links.txt b/luci-app-adguardhome/root/usr/share/AdGuardHome/links.txt new file mode 100755 index 000000000..e4f1c8fa7 --- /dev/null +++ b/luci-app-adguardhome/root/usr/share/AdGuardHome/links.txt @@ -0,0 +1,3 @@ +https://static.adguard.com/adguardhome/beta/AdGuardHome_linux_${Arch}.tar.gz +https://github.com/AdguardTeam/AdGuardHome/releases/download/${latest_ver}/AdGuardHome_linux_${Arch}.tar.gz +https://static.adguard.com/adguardhome/release/AdGuardHome_linux_${Arch}.tar.gz diff --git a/luci-app-adguardhome/root/usr/share/AdGuardHome/tailto.sh b/luci-app-adguardhome/root/usr/share/AdGuardHome/tailto.sh new file mode 100755 index 000000000..9ccc21903 --- /dev/null +++ b/luci-app-adguardhome/root/usr/share/AdGuardHome/tailto.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +tail -n $1 "$2" > /var/run/tailtmp +cat /var/run/tailtmp > "$2" +rm /var/run/tailtmp diff --git a/luci-app-adguardhome/root/usr/share/AdGuardHome/update_core.sh b/luci-app-adguardhome/root/usr/share/AdGuardHome/update_core.sh new file mode 100755 index 000000000..74ba7268d --- /dev/null +++ b/luci-app-adguardhome/root/usr/share/AdGuardHome/update_core.sh @@ -0,0 +1,236 @@ +#!/bin/bash + +PATH="/usr/sbin:/usr/bin:/sbin:/bin" +binpath=$(uci get AdGuardHome.AdGuardHome.binpath) +if [ -z "$binpath" ]; then +uci set AdGuardHome.AdGuardHome.binpath="/tmp/AdGuardHome/AdGuardHome" +binpath="/tmp/AdGuardHome/AdGuardHome" +fi +mkdir -p ${binpath%/*} +upxflag=$(uci get AdGuardHome.AdGuardHome.upxflag 2>/dev/null) + +check_if_already_running(){ + running_tasks="$(ps |grep "AdGuardHome" |grep "update_core" |grep -v "grep" |awk '{print $1}' |wc -l)" + [ "${running_tasks}" -gt "2" ] && echo -e "\nA task is already running." && EXIT 2 +} + +check_wgetcurl(){ + which curl && downloader="curl -L -k --retry 2 --connect-timeout 20 -o" && return + which wget-ssl && downloader="wget-ssl --no-check-certificate -t 2 -T 20 -O" && return + [ -z "$1" ] && opkg update || (echo error opkg && EXIT 1) + [ -z "$1" ] && (opkg remove wget wget-nossl --force-depends ; opkg install wget ; check_wgetcurl 1 ;return) + [ "$1" == "1" ] && (opkg install curl ; check_wgetcurl 2 ; return) + echo error curl and wget && EXIT 1 +} + +check_latest_version(){ + check_wgetcurl + latest_ver="$($downloader - https://api.github.com/repos/AdguardTeam/AdGuardHome/releases/latest 2>/dev/null|grep -E 'tag_name' |grep -E 'v[0-9.]+' -o 2>/dev/null)" + if [ -z "${latest_ver}" ]; then + echo -e "\nFailed to check latest version, please try again later." && EXIT 1 + fi + now_ver="$($binpath -c /dev/null --check-config 2>&1| grep -m 1 -E 'v[0-9.]+' -o)" + if [ "${latest_ver}"x != "${now_ver}"x ] || [ "$1" == "force" ]; then + echo -e "Local version: ${now_ver}., cloud version: ${latest_ver}." + doupdate_core + else + echo -e "\nLocal version: ${now_ver}, cloud version: ${latest_ver}." + echo -e "You're already using the latest version." + if [ ! -z "$upxflag" ]; then + filesize=$(ls -l $binpath | awk '{ print $5 }') + if [ $filesize -gt 8000000 ]; then + echo -e "start upx may take a long time" + doupx + mkdir -p "/tmp/AdGuardHomeupdate/AdGuardHome" >/dev/null 2>&1 + rm -fr /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/} + /tmp/upx-${upx_latest_ver}-${Arch}_linux/upx $upxflag $binpath -o /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/} + rm -rf /tmp/upx-${upx_latest_ver}-${Arch}_linux + /etc/init.d/AdGuardHome stop nobackup + rm $binpath + mv -f /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/} $binpath + /etc/init.d/AdGuardHome start + echo -e "finished" + fi + fi + EXIT 0 + fi +} + +doupx(){ + Archt="$(opkg info kernel | grep Architecture | awk -F "[ _]" '{print($2)}')" + case $Archt in + "i386") + Arch="i386" + ;; + "i686") + Arch="i386" + echo -e "i686 use $Arch may have bug" + ;; + "x86") + Arch="amd64" + ;; + "mipsel") + Arch="mipsel" + ;; + "mips64el") + Arch="mips64el" + Arch="mipsel" + echo -e "mips64el use $Arch may have bug" + ;; + "mips") + Arch="mips" + ;; + "mips64") + Arch="mips64" + Arch="mips" + echo -e "mips64 use $Arch may have bug" + ;; + "arm") + Arch="arm" + ;; + "armeb") + Arch="armeb" + ;; + "aarch64") + Arch="arm64" + ;; + "powerpc") + Arch="powerpc" + ;; + "powerpc64") + Arch="powerpc64" + ;; + *) + echo -e "error not support $Archt if you can use offical release please issue a bug" + EXIT 1 + ;; + esac + upx_latest_ver="$($downloader - https://api.github.com/repos/upx/upx/releases/latest 2>/dev/null|grep -E 'tag_name' |grep -E '[0-9.]+' -o 2>/dev/null)" + $downloader /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz "https://github.com/upx/upx/releases/download/v${upx_latest_ver}/upx-${upx_latest_ver}-${Arch}_linux.tar.xz" 2>&1 + #tar xvJf + which xz || (opkg list | grep ^xz || opkg update && opkg install xz) || (echo "xz download fail" && EXIT 1) + mkdir -p /tmp/upx-${upx_latest_ver}-${Arch}_linux + xz -d -c /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz| tar -x -C "/tmp" >/dev/null 2>&1 + if [ ! -e "/tmp/upx-${upx_latest_ver}-${Arch}_linux/upx" ]; then + echo -e "Failed to download upx." + EXIT 1 + fi + rm /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz +} + +doupdate_core(){ + echo -e "Updating core..." + mkdir -p "/tmp/AdGuardHomeupdate" + rm -rf /tmp/AdGuardHomeupdate/* >/dev/null 2>&1 + Archt="$(opkg info kernel | grep Architecture | awk -F "[ _]" '{print($2)}')" + case $Archt in + "i386") + Arch="386" + ;; + "i686") + Arch="386" + ;; + "x86") + Arch="amd64" + ;; + "mipsel") + Arch="mipsle" + ;; + "mips64el") + Arch="mips64le" + Arch="mipsle" + echo -e "mips64el use $Arch may have bug" + ;; + "mips") + Arch="mips" + ;; + "mips64") + Arch="mips64" + Arch="mips" + echo -e "mips64 use $Arch may have bug" + ;; + "arm") + Arch="arm" + ;; + "aarch64") + Arch="arm64" + ;; + "powerpc") + Arch="ppc" + echo -e "error not support $Archt" + EXIT 1 + ;; + "powerpc64") + Arch="ppc64" + echo -e "error not support $Archt" + EXIT 1 + ;; + *) + echo -e "error not support $Archt if you can use offical release please issue a bug" + EXIT 1 + ;; + esac + echo -e "start download" + grep -v "^#" /usr/share/AdGuardHome/links.txt >/tmp/run/AdHlinks.txt + while read link + do + eval link="$link" + $downloader /tmp/AdGuardHomeupdate/${link##*/} "$link" 2>&1 + if [ "$?" != "0" ]; then + echo "download failed try another download" + rm -f /tmp/AdGuardHomeupdate/${link##*/} + else + local success="1" + break + fi + done < "/tmp/run/AdHlinks.txt" + rm /tmp/run/AdHlinks.txt + [ -z "$success" ] && echo "no download success" && EXIT 1 + if [ "${link##*.}" == "gz" ]; then + tar -zxf "/tmp/AdGuardHomeupdate/${link##*/}" -C "/tmp/AdGuardHomeupdate/" + if [ ! -e "/tmp/AdGuardHomeupdate/AdGuardHome" ]; then + echo -e "Failed to download core." + rm -rf "/tmp/AdGuardHomeupdate" >/dev/null 2>&1 + EXIT 1 + fi + downloadbin="/tmp/AdGuardHomeupdate/AdGuardHome/AdGuardHome" + else + downloadbin="/tmp/AdGuardHomeupdate/${link##*/}" + fi + chmod 755 $downloadbin + echo -e "download success start copy" + if [ -n "$upxflag" ]; then + echo -e "start upx may take a long time" + doupx + /tmp/upx-${upx_latest_ver}-${Arch}_linux/upx $upxflag $downloadbin + rm -rf /tmp/upx-${upx_latest_ver}-${Arch}_linux + fi + echo -e "start copy" + /etc/init.d/AdGuardHome stop nobackup + rm "$binpath" + mv -f "$downloadbin" "$binpath" + if [ "$?" == "1" ]; then + echo "mv failed maybe not enough space please use upx or change bin to /tmp/AdGuardHome" + EXIT 1 + fi + /etc/init.d/AdGuardHome start + rm -rf "/tmp/AdGuardHomeupdate" >/dev/null 2>&1 + echo -e "Succeeded in updating core." + echo -e "Local version: ${latest_ver}, cloud version: ${latest_ver}.\n" + EXIT 0 +} + +EXIT(){ + rm /var/run/update_core 2>/dev/null + [ "$1" != "0" ] && touch /var/run/update_core_error + exit $1 +} + +main(){ + check_if_already_running + check_latest_version $1 +} + trap "EXIT 1" SIGTERM SIGINT + touch /var/run/update_core + rm /var/run/update_core_error 2>/dev/null + main $1 diff --git a/luci-app-adguardhome/root/usr/share/AdGuardHome/waitnet.sh b/luci-app-adguardhome/root/usr/share/AdGuardHome/waitnet.sh new file mode 100755 index 000000000..c7745e101 --- /dev/null +++ b/luci-app-adguardhome/root/usr/share/AdGuardHome/waitnet.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +PATH="/usr/sbin:/usr/bin:/sbin:/bin" +count=0 +while : +do + ping -c 1 -W 1 -q www.baidu.com 1>/dev/null 2>&1 + if [ "$?" == "0" ]; then + /etc/init.d/AdGuardHome force_reload + break + fi + ping -c 1 -W 1 -q 202.108.22.5 1>/dev/null 2>&1 + if [ "$?" == "0" ]; then + /etc/init.d/AdGuardHome force_reload + break + fi + sleep 5 + ping -c 1 -W 1 -q www.google.com 1>/dev/null 2>&1 + if [ "$?" == "0" ]; then + /etc/init.d/AdGuardHome force_reload + break + fi + ping -c 1 -W 1 -q 8.8.8.8 1>/dev/null 2>&1 + if [ "$?" == "0" ]; then + /etc/init.d/AdGuardHome force_reload + break + fi + sleep 5 + count=$((count+1)) + if [ $count -gt 18 ]; then + /etc/init.d/AdGuardHome force_reload + break + fi +done +return 0 diff --git a/luci-app-adguardhome/root/usr/share/AdGuardHome/watchconfig.sh b/luci-app-adguardhome/root/usr/share/AdGuardHome/watchconfig.sh new file mode 100755 index 000000000..61ba09de7 --- /dev/null +++ b/luci-app-adguardhome/root/usr/share/AdGuardHome/watchconfig.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +PATH="/usr/sbin:/usr/bin:/sbin:/bin" +configpath=$(uci get AdGuardHome.AdGuardHome.configpath) +while : +do + sleep 10 + if [ -f "$configpath" ]; then + /etc/init.d/AdGuardHome do_redirect 1 + break + fi +done +return 0 diff --git a/luci-app-adguardhome/root/usr/share/rpcd/acl.d/luci-app-adguardhome.json b/luci-app-adguardhome/root/usr/share/rpcd/acl.d/luci-app-adguardhome.json new file mode 100755 index 000000000..485aa6205 --- /dev/null +++ b/luci-app-adguardhome/root/usr/share/rpcd/acl.d/luci-app-adguardhome.json @@ -0,0 +1,11 @@ +{ + "luci-app-adguardhome": { + "description": "Grant UCI access for luci-app-adguardhome", + "read": { + "uci": [ "AdGuardHome" ] + }, + "write": { + "uci": [ "AdGuardHome" ] + } + } +} diff --git a/luci-app-adguardhome/root/www/luci-static/resources/codemirror/addon/fold/foldcode.js b/luci-app-adguardhome/root/www/luci-static/resources/codemirror/addon/fold/foldcode.js new file mode 100755 index 000000000..f93d42b7f --- /dev/null +++ b/luci-app-adguardhome/root/www/luci-static/resources/codemirror/addon/fold/foldcode.js @@ -0,0 +1 @@ +!function(n){"object"==typeof exports&&"object"==typeof module?n(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],n):n(CodeMirror)}(function(n){"use strict";function e(e,o,i,t){if(i&&i.call){var l=i;i=null}else l=r(e,i,"rangeFinder");"number"==typeof o&&(o=n.Pos(o,0));var f=r(e,i,"minFoldSize");function d(n){var r=l(e,o);if(!r||r.to.line-r.from.linee.firstLine();)o=n.Pos(o.line-1,0),u=d(!1);if(u&&!u.cleared&&"unfold"!==t){var a=function(n,e){var o=r(n,e,"widget");if("string"==typeof o){var i=document.createTextNode(o);(o=document.createElement("span")).appendChild(i),o.className="CodeMirror-foldmarker"}else o&&(o=o.cloneNode(!0));return o}(e,i);n.on(a,"mousedown",function(e){c.clear(),n.e_preventDefault(e)});var c=e.markText(u.from,u.to,{replacedWith:a,clearOnEnter:r(e,i,"clearOnEnter"),__isFold:!0});c.on("clear",function(o,r){n.signal(e,"unfold",e,o,r)}),n.signal(e,"fold",e,u.from,u.to)}}n.newFoldFunction=function(n,o){return function(r,i){e(r,i,{rangeFinder:n,widget:o})}},n.defineExtension("foldCode",function(n,o,r){e(this,n,o,r)}),n.defineExtension("isFolded",function(n){for(var e=this.findMarksAt(n),o=0;o=u){if(s&&f&&s.test(f.className))return;i=r(a.indicatorOpen)}}(i||f)&&t.setGutterMarker(n,a.gutter,i)})}function i(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}function f(t){var o=t.getViewport(),e=t.state.foldGutter;e&&(t.operation(function(){n(t,o.from,o.to)}),e.from=o.from,e.to=o.to)}function a(t,r,n){var i=t.state.foldGutter;if(i){var f=i.options;if(n==f.gutter){var a=e(t,r);a?a.clear():t.foldCode(o(r,0),f)}}}function d(t){var o=t.state.foldGutter;if(o){var e=o.options;o.from=o.to=0,clearTimeout(o.changeUpdate),o.changeUpdate=setTimeout(function(){f(t)},e.foldOnChangeTimeSpan||600)}}function u(t){var o=t.state.foldGutter;if(o){var e=o.options;clearTimeout(o.changeUpdate),o.changeUpdate=setTimeout(function(){var e=t.getViewport();o.from==o.to||e.from-o.to>20||o.from-e.to>20?f(t):t.operation(function(){e.fromo.to&&(n(t,o.to,e.to),o.to=e.to)})},e.updateViewportTimeSpan||400)}}function l(t,o){var e=t.state.foldGutter;if(e){var r=o.line;r>=e.from&&ro))break;r=l}}return r?{from:e.Pos(i.line,t.getLine(i.line).length),to:e.Pos(r,t.getLine(r).length)}:void 0}})}); \ No newline at end of file diff --git a/luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.css b/luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.css new file mode 100755 index 000000000..43ac1a9fa --- /dev/null +++ b/luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.css @@ -0,0 +1 @@ +.CodeMirror{font-family:monospace;height:500px;color:black;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:0;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,0.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:0}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0} diff --git a/luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.js b/luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.js new file mode 100755 index 000000000..d01f072ee --- /dev/null +++ b/luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CodeMirror=t()}(this,function(){"use strict";var e=navigator.userAgent,t=navigator.platform,r=/gecko\/\d/i.test(e),n=/MSIE \d/.test(e),i=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),o=/Edge\/(\d+)/.exec(e),l=n||i||o,s=l&&(n?document.documentMode||6:+(o||i)[1]),a=!o&&/WebKit\//.test(e),u=a&&/Qt\/\d+\.\d+/.test(e),c=!o&&/Chrome\//.test(e),h=/Opera\//.test(e),f=/Apple Computer/.test(navigator.vendor),d=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),p=/PhantomJS/.test(e),g=!o&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),v=/Android/.test(e),m=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=g||/Mac/.test(t),b=/\bCrOS\b/.test(e),w=/win/i.test(t),x=h&&e.match(/Version\/(\d*\.\d*)/);x&&(x=Number(x[1])),x&&x>=15&&(h=!1,a=!0);var C=y&&(u||h&&(null==x||x<12.11)),S=r||l&&s>=9;function L(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var k,T=function(e,t){var r=e.className,n=L(t).exec(r);if(n){var i=r.slice(n.index+n[0].length);e.className=r.slice(0,n.index)+(i?n[1]+i:"")}};function M(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function N(e,t){return M(e).appendChild(t)}function O(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o=t)return l+(t-o);l+=s-o,l+=r-l%r,o=s+1}}g?P=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:l&&(P=function(e){try{e.select()}catch(e){}});var R=function(){this.id=null,this.f=null,this.time=0,this.handler=E(this.onTimeout,this)};function B(e,t){for(var r=0;r=t)return n+Math.min(l,t-i);if(i+=o-n,n=o+1,(i+=r-i%r)>=t)return n}}var Y=[""];function _(e){for(;Y.length<=e;)Y.push($(Y)+" ");return Y[e]}function $(e){return e[e.length-1]}function q(e,t){for(var r=[],n=0;n"€"&&(e.toUpperCase()!=e.toLowerCase()||J.test(e))}function te(e,t){return t?!!(t.source.indexOf("\\w")>-1&&ee(e))||t.test(e):ee(e)}function re(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ne=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ie(e){return e.charCodeAt(0)>=768&&ne.test(e)}function oe(e,t,r){for(;(r<0?t>0:tr?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}var se=null;function ae(e,t,r){var n;se=null;for(var i=0;it)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:se=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:se=i)}return null!=n?n:se}var ue=function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",t="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";var r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,n=/[stwN]/,i=/[LRr]/,o=/[Lb1n]/,l=/[1n]/;function s(e,t,r){this.level=e,this.from=t,this.to=r}return function(a,u){var c="ltr"==u?"L":"R";if(0==a.length||"ltr"==u&&!r.test(a))return!1;for(var h,f=a.length,d=[],p=0;p-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function ge(e,t){var r=de(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i0}function be(e){e.prototype.on=function(e,t){fe(this,e,t)},e.prototype.off=function(e,t){pe(this,e,t)}}function we(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function xe(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Ce(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Se(e){we(e),xe(e)}function Le(e){return e.target||e.srcElement}function ke(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var Te,Me,Ne=function(){if(l&&s<9)return!1;var e=O("div");return"draggable"in e||"dragDrop"in e}();function Oe(e){if(null==Te){var t=O("span","​");N(e,O("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Te=t.offsetWidth<=1&&t.offsetHeight>2&&!(l&&s<8))}var r=Te?O("span","​"):O("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function Ae(e){if(null!=Me)return Me;var t=N(e,document.createTextNode("AخA")),r=k(t,0,1).getBoundingClientRect(),n=k(t,1,2).getBoundingClientRect();return M(e),!(!r||r.left==r.right)&&(Me=n.right-r.right<3)}var De,We=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),l=o.indexOf("\r");-1!=l?(r.push(o.slice(0,l)),t+=l+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\r\n?|\n/)},He=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Fe="oncopy"in(De=O("div"))||(De.setAttribute("oncopy","return;"),"function"==typeof De.oncopy),Pe=null;var Ee={},Ie={};function ze(e){if("string"==typeof e&&Ie.hasOwnProperty(e))e=Ie[e];else if(e&&"string"==typeof e.name&&Ie.hasOwnProperty(e.name)){var t=Ie[e.name];"string"==typeof t&&(t={name:t}),(e=Q(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return ze("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return ze("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Re(e,t){t=ze(t);var r=Ee[t.name];if(!r)return Re(e,"text/plain");var n=r(e,t);if(Be.hasOwnProperty(t.name)){var i=Be[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)n[l]=t.modeProps[l];return n}var Be={};function Ge(e,t){I(t,Be.hasOwnProperty(e)?Be[e]:Be[e]={})}function Ue(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function Ve(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Ke(e,t,r){return!e.startState||e.startState(t,r)}var je=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};function Xe(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t=e.first&&tr?et(r,Xe(e,r).text.length):function(e,t){var r=e.ch;return null==r||r>t?et(e.line,t):r<0?et(e.line,0):e}(t,Xe(e,t.line).text.length)}function at(e,t){for(var r=[],n=0;n=this.string.length},je.prototype.sol=function(){return this.pos==this.lineStart},je.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},je.prototype.next=function(){if(this.post},je.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},je.prototype.skipToEnd=function(){this.pos=this.string.length},je.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},je.prototype.backUp=function(e){this.pos-=e},je.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},je.prototype.current=function(){return this.string.slice(this.start,this.pos)},je.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},je.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},je.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var ut=function(e,t){this.state=e,this.lookAhead=t},ct=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function ht(e,t,r,n){var i=[e.state.modeGen],o={};wt(e,t.text,e.doc.mode,r,function(e,t){return i.push(e,t)},o,n);for(var l=r.state,s=function(n){r.baseTokens=i;var s=e.state.overlays[n],a=1,u=0;r.state=!0,wt(e,t.text,s.mode,r,function(e,t){for(var r=a;ue&&i.splice(a,1,e,i[a+1],n),a+=2,u=Math.min(e,n)}if(t)if(s.opaque)i.splice(r,a-r,e,"overlay "+t),a=r+2;else for(;re.options.maxHighlightLength&&Ue(e.doc.mode,n.state),o=ht(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function dt(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new ct(n,!0,t);var o=function(e,t,r){for(var n,i,o=e.doc,l=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=o.first)return o.first;var a=Xe(o,s-1),u=a.stateAfter;if(u&&(!r||s+(u instanceof ut?u.lookAhead:0)<=o.modeFrontier))return s;var c=z(a.text,null,e.options.tabSize);(null==i||n>c)&&(i=s-1,n=c)}return i}(e,t,r),l=o>n.first&&Xe(n,o-1).stateAfter,s=l?ct.fromSaved(n,l,o):new ct(n,Ke(n.mode),o);return n.iter(o,t,function(r){pt(e,r.text,s);var n=s.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&nt.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}ct.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},ct.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},ct.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},ct.fromSaved=function(e,t,r){return t instanceof ut?new ct(e,Ue(e.mode,t.state),r,t.lookAhead):new ct(e,Ue(e.mode,t),r)},ct.prototype.save=function(e){var t=!1!==e?Ue(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ut(t,this.maxLookAhead):t};var mt=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r};function yt(e,t,r,n){var i,o,l=e.doc,s=l.mode,a=Xe(l,(t=st(l,t)).line),u=dt(e,t.line,r),c=new je(a.text,e.options.tabSize,u);for(n&&(o=[]);(n||c.pose.options.maxHighlightLength?(s=!1,l&&pt(e,t,n,h.pos),h.pos=t.length,a=null):a=bt(vt(r,h,n.state,f),o),f){var d=f[0].name;d&&(a="m-"+(a?d+" "+a:d))}if(!s||c!=a){for(;u=t:o.to>t);(n||(n=[])).push(new St(l,o.from,s?null:o.to))}}return n}(r,i,l),a=function(e,t,r){var n;if(e)for(var i=0;i=t:o.to>t)||o.from==t&&"bookmark"==l.type&&(!r||o.marker.insertLeft)){var s=null==o.from||(l.inclusiveLeft?o.from<=t:o.from0&&s)for(var b=0;bt)&&(!r||Wt(r,o.marker)<0)&&(r=o.marker)}return r}function It(e,t,r,n,i){var o=Xe(e,t),l=Ct&&o.markedSpans;if(l)for(var s=0;s=0&&h<=0||c<=0&&h>=0)&&(c<=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?tt(u.to,r)>=0:tt(u.to,r)>0)||c>=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?tt(u.from,n)<=0:tt(u.from,n)<0)))return!0}}}function zt(e){for(var t;t=Ft(e);)e=t.find(-1,!0).line;return e}function Rt(e,t){var r=Xe(e,t),n=zt(r);return r==n?t:qe(n)}function Bt(e,t){if(t>e.lastLine())return t;var r,n=Xe(e,t);if(!Gt(e,n))return t;for(;r=Pt(n);)n=r.find(1,!0).line;return qe(n)+1}function Gt(e,t){var r=Ct&&t.markedSpans;if(r)for(var n=void 0,i=0;it.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)})}var Xt=function(e,t,r){this.text=e,Ot(this,t),this.height=r?r(this):1};function Yt(e){e.parent=null,Nt(e)}Xt.prototype.lineNo=function(){return qe(this)},be(Xt);var _t={},$t={};function qt(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?$t:_t;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function Zt(e,t){var r=A("span",null,null,a?"padding-right: .1px":null),n={pre:A("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,l=void 0;n.pos=0,n.addToken=Jt,Ae(e.display.measure)&&(l=ce(o,e.doc.direction))&&(n.addToken=er(n.addToken,l)),n.map=[],rr(o,n,ft(e,o,t!=e.display.externalMeasured&&qe(o))),o.styleClasses&&(o.styleClasses.bgClass&&(n.bgClass=F(o.styleClasses.bgClass,n.bgClass||"")),o.styleClasses.textClass&&(n.textClass=F(o.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Oe(e.display.measure))),0==i?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(a){var s=n.content.lastChild;(/\bcm-tab\b/.test(s.className)||s.querySelector&&s.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return ge(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function Qt(e){var t=O("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Jt(e,t,r,n,i,o,a){if(t){var u,c=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var r=t,n="",i=0;iu&&h.from<=u);f++);if(h.to>=c)return e(r,n,i,o,l,s,a);e(r,n.slice(0,h.to-u),i,o,null,s,a),o=null,n=n.slice(h.to-u),u=h.to}}}function tr(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function rr(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var l,s,a,u,c,h,f,d=i.length,p=0,g=1,v="",m=0;;){if(m==p){a=u=c=s="",f=null,h=null,m=1/0;for(var y=[],b=void 0,w=0;wp||C.collapsed&&x.to==p&&x.from==p)){if(null!=x.to&&x.to!=p&&m>x.to&&(m=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==m&&(b||(b=[])).push(C.endStyle,x.to),C.title&&((f||(f={})).title=C.title),C.attributes)for(var S in C.attributes)(f||(f={}))[S]=C.attributes[S];C.collapsed&&(!h||Wt(h.marker,C)<0)&&(h=x)}else x.from>p&&m>x.from&&(m=x.from)}if(b)for(var L=0;L=d)break;for(var T=Math.min(d,m);;){if(v){var M=p+v.length;if(!h){var N=M>T?v.slice(0,T-p):v;t.addToken(t,N,l?l+a:a,c,p+N.length==m?u:"",s,f)}if(M>=T){v=v.slice(T-p),p=T;break}p=M,c=""}v=i.slice(o,o=r[g++]),l=qt(r[g++],t.cm.options)}}else for(var O=1;Or)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Or(e,t,r,n){return Wr(e,Dr(e,t),r,n)}function Ar(e,t){if(t>=e.display.viewFrom&&t=r.lineN&&t2&&o.push((a.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,r,n){var i,o=Pr(t.map,r,n),a=o.node,u=o.start,c=o.end,h=o.collapse;if(3==a.nodeType){for(var f=0;f<4;f++){for(;u&&ie(t.line.text.charAt(o.coverStart+u));)--u;for(;o.coverStart+c1}(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else{var d;u>0&&(h=n="right"),i=e.options.lineWrapping&&(d=a.getClientRects()).length>1?d["right"==n?d.length-1:0]:a.getBoundingClientRect()}if(l&&s<9&&!u&&(!i||!i.left&&!i.right)){var p=a.parentNode.getClientRects()[0];i=p?{left:p.left,right:p.left+tn(e.display),top:p.top,bottom:p.bottom}:Fr}for(var g=i.top-t.rect.top,v=i.bottom-t.rect.top,m=(g+v)/2,y=t.view.measure.heights,b=0;bt)&&(i=(o=a-s)-1,t>=a&&(l="right")),null!=i){if(n=e[u+2],s==a&&r==(n.insertLeft?"left":"right")&&(l=r),"left"==r&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)n=e[2+(u-=3)],l="left";if("right"==r&&i==a-s)for(;u=0&&(r=e[i]).left==r.right;i--);return r}function Ir(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=n.text.length?(a=n.text.length,u="before"):a<=0&&(a=0,u="after"),!s)return l("before"==u?a-1:a,"before"==u);function c(e,t,r){return l(r?e-1:e,1==s[t].level!=r)}var h=ae(s,a,u),f=se,d=c(a,h,"before"==u);return null!=f&&(d.other=c(a,f,"before"!=u)),d}function Yr(e,t){var r=0;t=st(e.doc,t),e.options.lineWrapping||(r=tn(e.display)*t.ch);var n=Xe(e.doc,t.line),i=Vt(n)+Cr(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function _r(e,t,r,n,i){var o=et(e,t,r);return o.xRel=i,n&&(o.outside=n),o}function $r(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return _r(n.first,0,null,-1,-1);var i=Ze(n,r),o=n.first+n.size-1;if(i>o)return _r(n.first+n.size-1,Xe(n,o).text.length,null,1,1);t<0&&(t=0);for(var l=Xe(n,i);;){var s=Jr(e,l,i,t,r),a=Et(l,s.ch+(s.xRel>0||s.outside>0?1:0));if(!a)return s;var u=a.find(1);if(u.line==i)return u;l=Xe(n,i=u.line)}}function qr(e,t,r,n){n-=Ur(t);var i=t.text.length,o=le(function(t){return Wr(e,r,t-1).bottom<=n},i,0);return{begin:o,end:i=le(function(t){return Wr(e,r,t).top>n},o,i)}}function Zr(e,t,r,n){return r||(r=Dr(e,t)),qr(e,t,r,Vr(e,t,Wr(e,r,n),"line").top)}function Qr(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function Jr(e,t,r,n,i){i-=Vt(t);var o=Dr(e,t),l=Ur(t),s=0,a=t.text.length,u=!0,c=ce(t,e.doc.direction);if(c){var h=(e.options.lineWrapping?function(e,t,r,n,i,o,l){var s=qr(e,t,n,l),a=s.begin,u=s.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,h=null,f=0;f=u||d.to<=a)){var p=1!=d.level,g=Wr(e,n,p?Math.min(u,d.to)-1:Math.max(a,d.from)).right,v=gv)&&(c=d,h=v)}}c||(c=i[i.length-1]);c.fromu&&(c={from:c.from,to:u,level:c.level});return c}:function(e,t,r,n,i,o,l){var s=le(function(s){var a=i[s],u=1!=a.level;return Qr(Xr(e,et(r,u?a.to:a.from,u?"before":"after"),"line",t,n),o,l,!0)},0,i.length-1),a=i[s];if(s>0){var u=1!=a.level,c=Xr(e,et(r,u?a.from:a.to,u?"after":"before"),"line",t,n);Qr(c,o,l,!0)&&c.top>l&&(a=i[s-1])}return a})(e,t,r,o,c,n,i);s=(u=1!=h.level)?h.from:h.to-1,a=u?h.to:h.from-1}var f,d,p=null,g=null,v=le(function(t){var r=Wr(e,o,t);return r.top+=l,r.bottom+=l,!!Qr(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(p=t,g=r),!0)},s,a),m=!1;if(g){var y=n-g.left=w.bottom?1:0}return _r(r,v=oe(t.text,v,1),d,m,n-f)}function en(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Hr){Hr=O("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Hr.appendChild(document.createTextNode("x")),Hr.appendChild(O("br"));Hr.appendChild(document.createTextNode("x"))}N(e.measure,Hr);var r=Hr.offsetHeight/50;return r>3&&(e.cachedTextHeight=r),M(e.measure),r||1}function tn(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=O("span","xxxxxxxxxx"),r=O("pre",[t],"CodeMirror-line-like");N(e.measure,r);var n=t.getBoundingClientRect(),i=(n.right-n.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function rn(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l){var s=e.display.gutterSpecs[l].className;r[s]=o.offsetLeft+o.clientLeft+i,n[s]=o.clientWidth}return{fixedPos:nn(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function nn(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function on(e){var t=en(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/tn(e.display)-3);return function(i){if(Gt(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;nt)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Ct&&Rt(e.doc,t)i.viewFrom?hn(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)hn(e);else if(t<=i.viewFrom){var o=fn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):hn(e)}else if(r>=i.viewTo){var l=fn(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):hn(e)}else{var s=fn(e,t,t,-1),a=fn(e,r,r+n,1);s&&a?(i.view=i.view.slice(0,s.index).concat(ir(e,s.lineN,a.lineN)).concat(i.view.slice(a.index)),i.viewTo+=n):hn(e)}var u=i.externalMeasured;u&&(r=i.lineN&&t=n.viewTo)){var o=n.view[an(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==B(l,r)&&l.push(r)}}}function hn(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function fn(e,t,r,n){var i,o=an(e,t),l=e.display.view;if(!Ct||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var s=e.display.viewFrom,a=0;a0){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,r+=i}for(;Rt(e.doc,r)!=r;){if(o==(n<0?0:l.length-1))return null;r+=n*l[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function dn(e){for(var t=e.display.view,r=0,n=0;n=e.display.viewTo||s.to().linet||t==r&&l.to==t)&&(n(Math.max(l.from,t),Math.min(l.to,r),1==l.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}(g,r||0,null==n?f:n,function(e,t,i,h){var v="ltr"==i,m=d(e,v?"left":"right"),y=d(t-1,v?"right":"left"),b=null==r&&0==e,w=null==n&&t==f,x=0==h,C=!g||h==g.length-1;if(y.top-m.top<=3){var S=(u?w:b)&&C,L=(u?b:w)&&x?s:(v?m:y).left,k=S?a:(v?y:m).right;c(L,m.top,k-L,m.bottom)}else{var T,M,N,O;v?(T=u&&b&&x?s:m.left,M=u?a:p(e,i,"before"),N=u?s:p(t,i,"after"),O=u&&w&&C?a:y.right):(T=u?p(e,i,"before"):s,M=!u&&b&&x?a:m.right,N=!u&&w&&C?s:y.left,O=u?p(t,i,"after"):a),c(T,m.top,M-T,m.bottom),m.bottom0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(r=!r)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function wn(e){e.state.focused||(e.display.input.focus(),Cn(e))}function xn(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,Sn(e))},100)}function Cn(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(ge(e,"focus",e,t),e.state.focused=!0,H(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),a&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),bn(e))}function Sn(e,t){e.state.delayingBlurEvent||(e.state.focused&&(ge(e,"blur",e,t),e.state.focused=!1,T(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function Ln(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=0;n.005||f<-.005)&&($e(i.line,a),kn(i.line),i.rest))for(var d=0;de.display.sizerWidth){var p=Math.ceil(u/tn(e.display));p>e.display.maxLineLength&&(e.display.maxLineLength=p,e.display.maxLine=i.line,e.display.maxLineChanged=!0)}}}}function kn(e){if(e.widgets)for(var t=0;t=l&&(o=Ze(t,Vt(Xe(t,a))-e.wrapper.clientHeight),l=a)}return{from:o,to:Math.max(l,o+1)}}function Mn(e,t){var r=e.display,n=en(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=Mr(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+Sr(r),a=t.tops-n;if(t.topi+o){var c=Math.min(t.top,(u?s:t.bottom)-o);c!=i&&(l.scrollTop=c)}var h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft,f=Tr(e)-(e.options.fixedGutter?r.gutters.offsetWidth:0),d=t.right-t.left>f;return d&&(t.right=t.left+f),t.left<10?l.scrollLeft=0:t.leftf+h-3&&(l.scrollLeft=t.right+(d?0:10)-f),l}function Nn(e,t){null!=t&&(Dn(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function On(e){Dn(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function An(e,t,r){null==t&&null==r||Dn(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function Dn(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Wn(e,Yr(e,t.from),Yr(e,t.to),t.margin))}function Wn(e,t,r,n){var i=Mn(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});An(e,i.scrollLeft,i.scrollTop)}function Hn(e,t){Math.abs(e.doc.scrollTop-t)<2||(r||oi(e,{top:t}),Fn(e,t,!0),r&&oi(e),ei(e,100))}function Fn(e,t,r){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Pn(e,t,r,n){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,ai(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function En(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+Sr(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+kr(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}var In=function(e,t,r){this.cm=r;var n=this.vert=O("div",[O("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=O("div",[O("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=i.tabIndex=-1,e(n),e(i),fe(n,"scroll",function(){n.clientHeight&&t(n.scrollTop,"vertical")}),fe(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,l&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};In.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display="block",this.vert.style.bottom=t?n+"px":"0";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=r?n+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},In.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},In.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},In.prototype.zeroWidthHack=function(){var e=y&&!d?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new R,this.disableVert=new R},In.prototype.enableZeroWidthBar=function(e,t,r){e.style.pointerEvents="auto",t.set(1e3,function n(){var i=e.getBoundingClientRect();("vert"==r?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,n)})},In.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var zn=function(){};function Rn(e,t){t||(t=En(e));var r=e.display.barWidth,n=e.display.barHeight;Bn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&Ln(e),Bn(e,En(e)),r=e.display.barWidth,n=e.display.barHeight}function Bn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}zn.prototype.update=function(){return{bottom:0,right:0}},zn.prototype.setScrollLeft=function(){},zn.prototype.setScrollTop=function(){},zn.prototype.clear=function(){};var Gn={native:In,null:zn};function Un(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&T(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Gn[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),fe(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,r){"horizontal"==r?Pn(e,t):Hn(e,t)},e),e.display.scrollbars.addClass&&H(e.display.wrapper,e.display.scrollbars.addClass)}var Vn=0;function Kn(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Vn},t=e.curOp,or?or.ops.push(t):t.ownsGroup=or={ops:[t],delayedCallbacks:[]}}function jn(e){var t=e.curOp;t&&function(e,t){var r=e.ownsGroup;if(r)try{!function(e){var t=e.delayedCallbacks,r=0;do{for(;r=r.viewTo)||r.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new ri(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Yn(e){var t=e.cm,r=t.display;e.updatedDisplay&&Ln(t),e.barMeasure=En(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Or(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+kr(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Tr(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function _n(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!p){var o=O("div","​",null,"position: absolute;\n top: "+(t.top-r.viewOffset-Cr(e.display))+"px;\n height: "+(t.bottom-t.top+kr(e)+r.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,function(e,t,r,n){var i;null==n&&(n=0),e.options.lineWrapping||t!=r||(r="before"==(t=t.ch?et(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?et(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var l=!1,s=Xr(e,t),a=r&&r!=t?Xr(e,r):s,u=Mn(e,i={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-n,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+n}),c=e.doc.scrollTop,h=e.doc.scrollLeft;if(null!=u.scrollTop&&(Hn(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(l=!0)),null!=u.scrollLeft&&(Pn(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-h)>1&&(l=!0)),!l)break}return i}(t,st(n,e.scrollToPos.from),st(n,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var l=0;l=e.display.viewTo)){var r=+new Date+e.options.workTime,n=dt(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(n.line>=e.display.viewFrom){var l=o.styles,s=o.text.length>e.options.maxHighlightLength?Ue(t.mode,n.state):null,a=ht(e,o,n,!0);s&&(n.state=s),o.styles=a.styles;var u=o.styleClasses,c=a.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var h=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),f=0;!h&&fr)return ei(e,e.options.workDelay),!0}),t.highlightFrontier=n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&qn(e,function(){for(var t=0;t=r.viewFrom&&t.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==dn(e))return!1;ui(e)&&(hn(e),t.dims=rn(e));var i=n.first+n.size,o=Math.max(t.visible.from-e.options.viewportMargin,n.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);r.viewFroml&&r.viewTo-l<20&&(l=Math.min(i,r.viewTo)),Ct&&(o=Rt(e.doc,o),l=Bt(e.doc,l));var s=o!=r.viewFrom||l!=r.viewTo||r.lastWrapHeight!=t.wrapperHeight||r.lastWrapWidth!=t.wrapperWidth;!function(e,t,r){var n=e.display;0==n.view.length||t>=n.viewTo||r<=n.viewFrom?(n.view=ir(e,t,r),n.viewFrom=t):(n.viewFrom>t?n.view=ir(e,t,n.viewFrom).concat(n.view):n.viewFromr&&(n.view=n.view.slice(0,an(e,r)))),n.viewTo=r}(e,o,l),r.viewOffset=Vt(Xe(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+"px";var u=dn(e);if(!s&&0==u&&!t.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var c=function(e){if(e.hasFocus())return null;var t=W();if(!t||!D(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&D(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}(e);return u>4&&(r.lineDiv.style.display="none"),function(e,t,r){var n=e.display,i=e.options.lineNumbers,o=n.lineDiv,l=o.firstChild;function s(t){var r=t.nextSibling;return a&&y&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),r}for(var u=n.view,c=n.viewFrom,h=0;h-1&&(d=!1),ur(e,f,c,r)),d&&(M(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(Je(e.options,c)))),l=f.node.nextSibling}else{var p=vr(e,f,c,r);o.insertBefore(p,l)}c+=f.size}for(;l;)l=s(l)}(e,r.updateLineNumbers,t.dims),u>4&&(r.lineDiv.style.display=""),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=W()&&(e.activeElt.focus(),e.anchorNode&&D(document.body,e.anchorNode)&&D(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}(c),M(r.cursorDiv),M(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,s&&(r.lastWrapHeight=t.wrapperHeight,r.lastWrapWidth=t.wrapperWidth,ei(e,400)),r.updateLineNumbers=null,!0}function ii(e,t){for(var r=t.viewport,n=!0;(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Tr(e)||(r&&null!=r.top&&(r={top:Math.min(e.doc.height+Sr(e.display)-Mr(e),r.top)}),t.visible=Tn(e.display,e.doc,r),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&ni(e,t);n=!1){Ln(e);var i=En(e);pn(e),Rn(e,i),si(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function oi(e,t){var r=new ri(e,t);if(ni(e,r)){Ln(e),ii(e,r);var n=En(e);pn(e),Rn(e,n),si(e,n),r.finish()}}function li(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}function si(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+kr(e)+"px"}function ai(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=nn(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",l=0;ls.clientWidth,c=s.scrollHeight>s.clientHeight;if(i&&u||o&&c){if(o&&y&&a)e:for(var f=t.target,d=l.view;f!=s;f=f.parentNode)for(var p=0;p=0&&tt(e,n.to())<=0)return r}return-1};var bi=function(e,t){this.anchor=e,this.head=t};function wi(e,t,r){var n=e&&e.options.selectionsMayTouch,i=t[r];t.sort(function(e,t){return tt(e.from(),t.from())}),r=B(t,i);for(var o=1;o0:a>=0){var u=ot(s.from(),l.from()),c=it(s.to(),l.to()),h=s.empty()?l.from()==l.head:s.from()==s.head;o<=r&&--r,t.splice(--o,2,new bi(h?c:u,h?u:c))}}return new yi(t,r)}function xi(e,t){return new yi([new bi(e,t||e)],0)}function Ci(e){return e.text?et(e.from.line+e.text.length-1,$(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Si(e,t){if(tt(e,t.from)<0)return e;if(tt(e,t.to)<=0)return Ci(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=Ci(t).ch-t.to.ch),et(r,n)}function Li(e,t){for(var r=[],n=0;n1&&e.remove(s.line+1,p-1),e.insert(s.line+1,m)}sr(e,"change",e,t)}function Ai(e,t,r){!function e(n,i,o){if(n.linked)for(var l=0;ls-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(Pi(e.done),$(e.done)):e.done.length&&!$(e.done).ranges?$(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),$(e.done)):void 0}(i,i.lastOp==n)))l=$(o.changes),0==tt(t.from,t.to)&&0==tt(t.from,l.to)?l.to=Ci(t):o.changes.push(Fi(e,t));else{var a=$(i.done);for(a&&a.ranges||zi(e.sel,i.done),o={changes:[Fi(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,l||ge(e,"historyAdded")}function Ii(e,t,r,n){var i=e.history,o=n&&n.origin;r==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||function(e,t,r,n){var i=t.charAt(0);return"*"==i||"+"==i&&r.ranges.length==n.ranges.length&&r.somethingSelected()==n.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,$(i.done),t))?i.done[i.done.length-1]=t:zi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=r,n&&!1!==n.clearRedo&&Pi(i.undone)}function zi(e,t){var r=$(t);r&&r.ranges&&r.equals(e)||t.push(e)}function Ri(e,t,r,n){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),function(r){r.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=r.markedSpans),++o})}function Bi(e){if(!e)return null;for(var t,r=0;r-1&&($(s)[h]=u[h],delete u[h])}}}return n}function Vi(e,t,r,n){if(n){var i=e.anchor;if(r){var o=tt(t,i)<0;o!=tt(r,i)<0?(i=t,t=r):o!=tt(t,r)<0&&(t=r)}return new bi(i,t)}return new bi(r||t,t)}function Ki(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),$i(e,new yi([Vi(e.sel.primary(),t,r,i)],0),n)}function ji(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o=t.ch:s.to>t.ch))){if(i&&(ge(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!a.atomic)continue;if(r){var h=a.find(n<0?1:-1),f=void 0;if((n<0?c:u)&&(h=ro(e,h,-n,h&&h.line==t.line?o:null)),h&&h.line==t.line&&(f=tt(h,r))&&(n<0?f<0:f>0))return eo(e,h,t,n,i)}var d=a.find(n<0?-1:1);return(n<0?u:c)&&(d=ro(e,d,n,d.line==t.line?o:null)),d?eo(e,d,t,n,i):null}}return t}function to(e,t,r,n,i){var o=n||1,l=eo(e,t,r,o,i)||!i&&eo(e,t,r,o,!0)||eo(e,t,r,-o,i)||!i&&eo(e,t,r,-o,!0);return l||(e.cantEdit=!0,et(e.first,0))}function ro(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?st(e,et(t.line-1)):null:r>0&&t.ch==(n||Xe(e,t.line)).text.length?t.line0)){var c=[a,1],h=tt(u.from,s.from),f=tt(u.to,s.to);(h<0||!l.inclusiveLeft&&!h)&&c.push({from:u.from,to:s.from}),(f>0||!l.inclusiveRight&&!f)&&c.push({from:s.to,to:u.to}),i.splice.apply(i,c),a+=c.length-3}}return i}(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)lo(e,{from:n[i].from,to:n[i].to,text:i?[""]:t.text,origin:t.origin});else lo(e,t)}}function lo(e,t){if(1!=t.text.length||""!=t.text[0]||0!=tt(t.from,t.to)){var r=Li(e,t);Ei(e,t,r,e.cm?e.cm.curOp.id:NaN),uo(e,t,r,Tt(e,t));var n=[];Ai(e,function(e,r){r||-1!=B(n,e.history)||(po(e.history,t),n.push(e.history)),uo(e,t,null,Tt(e,t))})}}function so(e,t,r){var n=e.cm&&e.cm.state.suppressEdits;if(!n||r){for(var i,o=e.history,l=e.sel,s="undo"==t?o.done:o.undone,a="undo"==t?o.undone:o.done,u=0;u=0;--d){var p=f(d);if(p)return p.v}}}}function ao(e,t){if(0!=t&&(e.first+=t,e.sel=new yi(q(e.sel.ranges,function(e){return new bi(et(e.anchor.line+t,e.anchor.ch),et(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){un(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;ne.lastLine())){if(t.from.lineo&&(t={from:t.from,to:et(o,Xe(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Ye(e,t.from,t.to),r||(r=Li(e,t)),e.cm?function(e,t,r){var n=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=qe(zt(Xe(n,o.line))),n.iter(a,l.line+1,function(e){if(e==i.maxLine)return s=!0,!0}));n.sel.contains(t.from,t.to)>-1&&me(e);Oi(n,t,r,on(e)),e.options.lineWrapping||(n.iter(a,o.line+t.text.length,function(e){var t=Kt(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontierr;n--){var i=Xe(e,n).stateAfter;if(i&&(!(i instanceof ut)||n+i.lookAhead1||!(this.children[0]instanceof vo))){var s=[];this.collapse(s),this.children=[new vo(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var l=i.lines.length%25+25,s=l;s10);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=0;n0||0==l&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=A("span",[o.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(It(e,t.line,t,r,o)||t.line!=r.line&&It(e,r.line,t,r,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Ct=!0}o.addToHistory&&Ei(e,{from:t,to:r,origin:"markText"},e.sel,NaN);var s,a=t.line,u=e.cm;if(e.iter(a,r.line+1,function(e){u&&o.collapsed&&!u.options.lineWrapping&&zt(e)==u.display.maxLine&&(s=!0),o.collapsed&&a!=t.line&&$e(e,0),function(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}(e,new St(o,a==t.line?t.ch:null,a==r.line?r.ch:null)),++a}),o.collapsed&&e.iter(t.line,r.line+1,function(t){Gt(e,t)&&$e(t,0)}),o.clearOnEnter&&fe(o,"beforeCursorEnter",function(){return o.clear()}),o.readOnly&&(xt=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++wo,o.atomic=!0),u){if(s&&(u.curOp.updateMaxLine=!0),o.collapsed)un(u,t.line,r.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var c=t.line;c<=r.line;c++)cn(u,c,"text");o.atomic&&Qi(u.doc),sr(u,"markerAdded",u,o)}return o}xo.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Kn(e),ye(this,"clear")){var r=this.find();r&&sr(this,"clear",r.from,r.to)}for(var n=null,i=null,o=0;oe.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=n&&e&&this.collapsed&&un(e,n,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Qi(e.doc)),e&&sr(e,"markerCleared",e,this,n,i),t&&jn(e),this.parent&&this.parent.clear()}},xo.prototype.find=function(e,t){var r,n;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=0;a--)oo(this,n[a]);s?_i(this,s):this.cm&&On(this.cm)}),undo:Jn(function(){so(this,"undo")}),redo:Jn(function(){so(this,"redo")}),undoSelection:Jn(function(){so(this,"undo",!0)}),redoSelection:Jn(function(){so(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,r){e=st(this,e),t=st(this,t);var n=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var l=o.markedSpans;if(l)for(var s=0;s=a.to||null==a.from&&i!=e.line||null!=a.from&&i==t.line&&a.from>=t.ch||r&&!r(a.marker)||n.push(a.marker.parent||a.marker)}++i}),n},getAllMarks:function(){var e=[];return this.iter(function(t){var r=t.markedSpans;if(r)for(var n=0;ne)return t=e,!0;e-=o,++r}),st(this,et(r,t))},indexFromPos:function(e){var t=(e=st(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var c=e.dataTransfer.getData("Text");if(c){var h;if(t.state.draggingText&&!t.state.draggingText.copy&&(h=t.listSelections()),qi(t.doc,xi(r,r)),h)for(var f=0;f=0;t--)co(e.doc,"",n[t].from,n[t].to,"+delete");On(e)})}function _o(e,t,r){var n=oe(e.text,t+r,r);return n<0||n>e.text.length?null:n}function $o(e,t,r){var n=_o(e,t.ch,r);return null==n?null:new et(t.line,n,r<0?"after":"before")}function qo(e,t,r,n,i){if(e){var o=ce(r,t.doc.direction);if(o){var l,s=i<0?$(o):o[0],a=i<0==(1==s.level)?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var u=Dr(t,r);l=i<0?r.text.length-1:0;var c=Wr(t,u,l).top;l=le(function(e){return Wr(t,u,e).top==c},i<0==(1==s.level)?s.from:s.to-1,l),"before"==a&&(l=_o(r,l,1))}else l=i<0?s.to:s.from;return new et(n,l,a)}}return new et(n,i<0?r.text.length:0,i<0?"before":"after")}Ro.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Ro.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Ro.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Ro.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Ro.default=y?Ro.macDefault:Ro.pcDefault;var Zo={selectAll:no,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),V)},killLine:function(e){return Yo(e,function(t){if(t.empty()){var r=Xe(e.doc,t.head.line).text.length;return t.head.ch==r&&t.head.line0)i=new et(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),et(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=Xe(e.doc,i.line-1).text;l&&(i=new et(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),et(i.line-1,l.length-1),i,"+transpose"))}r.push(new bi(i,i))}e.setSelections(r)})},newlineAndIndent:function(e){return qn(e,function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(e.doc.lineSeparator(),t[r].anchor,t[r].head,"+input");t=e.listSelections();for(var n=0;n-1&&(tt((i=u.ranges[i]).from(),t)<0||t.xRel>0)&&(tt(i.to(),t)>0||t.xRel<0)?function(e,t,r,n){var i=e.display,o=!1,u=Zn(e,function(t){a&&(i.scroller.draggable=!1),e.state.draggingText=!1,pe(i.wrapper.ownerDocument,"mouseup",u),pe(i.wrapper.ownerDocument,"mousemove",c),pe(i.scroller,"dragstart",h),pe(i.scroller,"drop",u),o||(we(t),n.addNew||Ki(e.doc,r,null,null,n.extend),a||l&&9==s?setTimeout(function(){i.wrapper.ownerDocument.body.focus(),i.input.focus()},20):i.input.focus())}),c=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},h=function(){return o=!0};a&&(i.scroller.draggable=!0);e.state.draggingText=u,u.copy=!n.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop();fe(i.wrapper.ownerDocument,"mouseup",u),fe(i.wrapper.ownerDocument,"mousemove",c),fe(i.scroller,"dragstart",h),fe(i.scroller,"drop",u),xn(e),setTimeout(function(){return i.input.focus()},20)}(e,n,t,o):function(e,t,r,n){var i=e.display,o=e.doc;we(t);var l,s,a=o.sel,u=a.ranges;n.addNew&&!n.extend?(s=o.sel.contains(r),l=s>-1?u[s]:new bi(r,r)):(l=o.sel.primary(),s=o.sel.primIndex);if("rectangle"==n.unit)n.addNew||(l=new bi(r,r)),r=sn(e,t,!0,!0),s=-1;else{var c=dl(e,r,n.unit);l=n.extend?Vi(l,c.anchor,c.head,n.extend):c}n.addNew?-1==s?(s=u.length,$i(o,wi(e,u.concat([l]),s),{scroll:!1,origin:"*mouse"})):u.length>1&&u[s].empty()&&"char"==n.unit&&!n.extend?($i(o,wi(e,u.slice(0,s).concat(u.slice(s+1)),0),{scroll:!1,origin:"*mouse"}),a=o.sel):Xi(o,s,l,K):(s=0,$i(o,new yi([l],0),K),a=o.sel);var h=r;function f(t){if(0!=tt(h,t))if(h=t,"rectangle"==n.unit){for(var i=[],u=e.options.tabSize,c=z(Xe(o,r.line).text,r.ch,u),f=z(Xe(o,t.line).text,t.ch,u),d=Math.min(c,f),p=Math.max(c,f),g=Math.min(r.line,t.line),v=Math.min(e.lastLine(),Math.max(r.line,t.line));g<=v;g++){var m=Xe(o,g).text,y=X(m,d,u);d==p?i.push(new bi(et(g,y),et(g,y))):m.length>y&&i.push(new bi(et(g,y),et(g,X(m,p,u))))}i.length||i.push(new bi(r,r)),$i(o,wi(e,a.ranges.slice(0,s).concat(i),s),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var b,w=l,x=dl(e,t,n.unit),C=w.anchor;tt(x.anchor,C)>0?(b=x.head,C=ot(w.from(),x.anchor)):(b=x.anchor,C=it(w.to(),x.head));var S=a.ranges.slice(0);S[s]=function(e,t){var r=t.anchor,n=t.head,i=Xe(e.doc,r.line);if(0==tt(r,n)&&r.sticky==n.sticky)return t;var o=ce(i);if(!o)return t;var l=ae(o,r.ch,r.sticky),s=o[l];if(s.from!=r.ch&&s.to!=r.ch)return t;var a,u=l+(s.from==r.ch==(1!=s.level)?0:1);if(0==u||u==o.length)return t;if(n.line!=r.line)a=(n.line-r.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=ae(o,n.ch,n.sticky),h=c-l||(n.ch-r.ch)*(1==s.level?-1:1);a=c==u-1||c==u?h<0:h>0}var f=o[u+(a?-1:0)],d=a==(1==f.level),p=d?f.from:f.to,g=d?"after":"before";return r.ch==p&&r.sticky==g?t:new bi(new et(r.line,p,g),n)}(e,new bi(st(o,C),b)),$i(o,wi(e,S,s),K)}}var d=i.wrapper.getBoundingClientRect(),p=0;function g(t){e.state.selectingText=!1,p=1/0,t&&(we(t),i.input.focus()),pe(i.wrapper.ownerDocument,"mousemove",v),pe(i.wrapper.ownerDocument,"mouseup",m),o.history.lastSelOrigin=null}var v=Zn(e,function(t){0!==t.buttons&&ke(t)?function t(r){var l=++p;var s=sn(e,r,!0,"rectangle"==n.unit);if(!s)return;if(0!=tt(s,h)){e.curOp.focus=W(),f(s);var a=Tn(i,o);(s.line>=a.to||s.lined.bottom?20:0;u&&setTimeout(Zn(e,function(){p==l&&(i.scroller.scrollTop+=u,t(r))}),50)}}(t):g(t)}),m=Zn(e,g);e.state.selectingText=m,fe(i.wrapper.ownerDocument,"mousemove",v),fe(i.wrapper.ownerDocument,"mouseup",m)}(e,n,t,o)}(t,n,o,e):Le(e)==r.scroller&&we(e):2==i?(n&&Ki(t.doc,n),setTimeout(function(){return r.input.focus()},20)):3==i&&(S?t.display.input.onContextMenu(e):xn(t)))}}function dl(e,t,r){if("char"==r)return new bi(t,t);if("word"==r)return e.findWordAt(t);if("line"==r)return new bi(et(t.line,0),st(e.doc,et(t.line+1,0)));var n=r(e,t);return new bi(n.from,n.to)}function pl(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&we(t);var l=e.display,s=l.lineDiv.getBoundingClientRect();if(o>s.bottom||!ye(e,r))return Ce(t);o-=s.top-l.viewOffset;for(var a=0;a=i)return ge(e,r,e,Ze(e.doc,o),e.display.gutterSpecs[a].className,t),Ce(t)}}function gl(e,t){return pl(e,t,"gutterClick",!0)}function vl(e,t){xr(e.display,t)||function(e,t){if(!ye(e,"gutterContextMenu"))return!1;return pl(e,t,"gutterContextMenu",!1)}(e,t)||ve(e,t,"contextmenu")||S||e.display.input.onContextMenu(t)}function ml(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Rr(e)}hl.prototype.compare=function(e,t,r){return this.time+400>e&&0==tt(t,this.pos)&&r==this.button};var yl={toString:function(){return"CodeMirror.Init"}},bl={},wl={};function xl(e,t,r){if(!t!=!(r&&r!=yl)){var n=e.display.dragFunctions,i=t?fe:pe;i(e.display.scroller,"dragstart",n.start),i(e.display.scroller,"dragenter",n.enter),i(e.display.scroller,"dragover",n.over),i(e.display.scroller,"dragleave",n.leave),i(e.display.scroller,"drop",n.drop)}}function Cl(e){e.options.lineWrapping?(H(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(T(e.display.wrapper,"CodeMirror-wrap"),jt(e)),ln(e),un(e),Rr(e),setTimeout(function(){return Rn(e)},100)}function Sl(e,t){var n=this;if(!(this instanceof Sl))return new Sl(e,t);this.options=t=t?I(t):{},I(bl,t,!1);var i=t.value;"string"==typeof i?i=new Mo(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i;var o=new Sl.inputStyles[t.inputStyle](this),u=this.display=new function(e,t,n,i){var o=this;this.input=n,o.scrollbarFiller=O("div",null,"CodeMirror-scrollbar-filler"),o.scrollbarFiller.setAttribute("cm-not-content","true"),o.gutterFiller=O("div",null,"CodeMirror-gutter-filler"),o.gutterFiller.setAttribute("cm-not-content","true"),o.lineDiv=A("div",null,"CodeMirror-code"),o.selectionDiv=O("div",null,null,"position: relative; z-index: 1"),o.cursorDiv=O("div",null,"CodeMirror-cursors"),o.measure=O("div",null,"CodeMirror-measure"),o.lineMeasure=O("div",null,"CodeMirror-measure"),o.lineSpace=A("div",[o.measure,o.lineMeasure,o.selectionDiv,o.cursorDiv,o.lineDiv],null,"position: relative; outline: none");var u=A("div",[o.lineSpace],"CodeMirror-lines");o.mover=O("div",[u],null,"position: relative"),o.sizer=O("div",[o.mover],"CodeMirror-sizer"),o.sizerWidth=null,o.heightForcer=O("div",null,null,"position: absolute; height: "+G+"px; width: 1px;"),o.gutters=O("div",null,"CodeMirror-gutters"),o.lineGutter=null,o.scroller=O("div",[o.sizer,o.heightForcer,o.gutters],"CodeMirror-scroll"),o.scroller.setAttribute("tabIndex","-1"),o.wrapper=O("div",[o.scrollbarFiller,o.gutterFiller,o.scroller],"CodeMirror"),l&&s<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),a||r&&m||(o.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(o.wrapper):e(o.wrapper)),o.viewFrom=o.viewTo=t.first,o.reportedViewFrom=o.reportedViewTo=t.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,o.gutterSpecs=ci(i.gutters,i.lineNumbers),hi(o),n.init(o)}(e,i,o,t);for(var c in u.wrapper.CodeMirror=this,ml(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Un(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new R,keySeq:null,specialChars:null},t.autofocus&&!m&&u.input.focus(),l&&s<11&&setTimeout(function(){return n.display.input.reset(!0)},20),function(e){var t=e.display;fe(t.scroller,"mousedown",Zn(e,fl)),fe(t.scroller,"dblclick",l&&s<11?Zn(e,function(t){if(!ve(e,t)){var r=sn(e,t);if(r&&!gl(e,t)&&!xr(e.display,t)){we(t);var n=e.findWordAt(r);Ki(e.doc,n.anchor,n.head)}}}):function(t){return ve(e,t)||we(t)});fe(t.scroller,"contextmenu",function(t){return vl(e,t)});var r,n={end:0};function i(){t.activeTouch&&(r=setTimeout(function(){return t.activeTouch=null},1e3),(n=t.activeTouch).end=+new Date)}function o(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return r*r+n*n>400}fe(t.scroller,"touchstart",function(i){if(!ve(e,i)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(i)&&!gl(e,i)){t.input.ensurePolled(),clearTimeout(r);var o=+new Date;t.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}}),fe(t.scroller,"touchmove",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),fe(t.scroller,"touchend",function(r){var n=t.activeTouch;if(n&&!xr(t,r)&&null!=n.left&&!n.moved&&new Date-n.start<300){var l,s=e.coordsChar(t.activeTouch,"page");l=!n.prev||o(n,n.prev)?new bi(s,s):!n.prev.prev||o(n,n.prev.prev)?e.findWordAt(s):new bi(et(s.line,0),st(e.doc,et(s.line+1,0))),e.setSelection(l.anchor,l.head),e.focus(),we(r)}i()}),fe(t.scroller,"touchcancel",i),fe(t.scroller,"scroll",function(){t.scroller.clientHeight&&(Hn(e,t.scroller.scrollTop),Pn(e,t.scroller.scrollLeft,!0),ge(e,"scroll",e))}),fe(t.scroller,"mousewheel",function(t){return mi(e,t)}),fe(t.scroller,"DOMMouseScroll",function(t){return mi(e,t)}),fe(t.wrapper,"scroll",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(t){ve(e,t)||Se(t)},over:function(t){ve(e,t)||(!function(e,t){var r=sn(e,t);if(r){var n=document.createDocumentFragment();vn(e,r,n),e.display.dragCursor||(e.display.dragCursor=O("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),N(e.display.dragCursor,n)}}(e,t),Se(t))},start:function(t){return function(e,t){if(l&&(!e.state.draggingText||+new Date-No<100))Se(t);else if(!ve(e,t)&&!xr(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!f)){var r=O("img",null,null,"position: fixed; left: 0; top: 0;");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",h&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),h&&r.parentNode.removeChild(r)}}(e,t)},drop:Zn(e,Oo),leave:function(t){ve(e,t)||Ao(e)}};var a=t.input.getField();fe(a,"keyup",function(t){return sl.call(e,t)}),fe(a,"keydown",Zn(e,ll)),fe(a,"keypress",Zn(e,al)),fe(a,"focus",function(t){return Cn(e,t)}),fe(a,"blur",function(t){return Sn(e,t)})}(this),Ho(),Kn(this),this.curOp.forceUpdate=!0,Di(this,i),t.autofocus&&!m||this.hasFocus()?setTimeout(E(Cn,this),20):Sn(this),wl)wl.hasOwnProperty(c)&&wl[c](n,t[c],yl);ui(this),t.finishInit&&t.finishInit(this);for(var d=0;d150)){if(!n)return;r="prev"}}else u=0,r="not";"prev"==r?u=t>o.first?z(Xe(o,t-1).text,null,l):0:"add"==r?u=a+e.options.indentUnit:"subtract"==r?u=a-e.options.indentUnit:"number"==typeof r&&(u=a+r),u=Math.max(0,u);var h="",f=0;if(e.options.indentWithTabs)for(var d=Math.floor(u/l);d;--d)f+=l,h+="\t";if(fl,a=We(t),u=null;if(s&&n.ranges.length>1)if(Tl&&Tl.text.join("\n")==t){if(n.ranges.length%Tl.text.length==0){u=[];for(var c=0;c=0;f--){var d=n.ranges[f],p=d.from(),g=d.to();d.empty()&&(r&&r>0?p=et(p.line,p.ch-r):e.state.overwrite&&!s?g=et(g.line,Math.min(Xe(o,g.line).text.length,g.ch+$(a).length)):s&&Tl&&Tl.lineWise&&Tl.text.join("\n")==t&&(p=g=et(p.line,0)));var v={from:p,to:g,text:u?u[f%u.length]:a,origin:i||(s?"paste":e.state.cutIncoming>l?"cut":"+input")};oo(e.doc,v),sr(e,"inputRead",e,v)}t&&!s&&Al(e,t),On(e),e.curOp.updateInput<2&&(e.curOp.updateInput=h),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Ol(e,t){var r=e.clipboardData&&e.clipboardData.getData("Text");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||qn(t,function(){return Nl(t,r,0,null,"paste")}),!0}function Al(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;n>=0;n--){var i=r.ranges[n];if(!(i.head.ch>100||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s-1){l=kl(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Xe(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=kl(e,i.head.line,"smart"));l&&sr(e,"electricInput",e,i.head.line)}}}function Dl(e){for(var t=[],r=[],n=0;n=t.text.length?(r.ch=t.text.length,r.sticky="before"):r.ch<=0&&(r.ch=0,r.sticky="after");var o=ae(i,r.ch,r.sticky),l=i[o];if("ltr"==e.doc.direction&&l.level%2==0&&(n>0?l.to>r.ch:l.from=l.from&&f>=c.begin)){var d=h?"before":"after";return new et(r.line,f,d)}}var p=function(e,t,n){for(var o=function(e,t){return t?new et(r.line,a(e,1),"before"):new et(r.line,e,"after")};e>=0&&e0==(1!=l.level),u=s?n.begin:a(n.end,-1);if(l.from<=u&&u0?c.end:a(c.begin,-1);return null==v||n>0&&v==t.text.length||!(g=p(n>0?0:i.length-1,n,u(v)))?null:g}(e.cm,s,t,r):$o(s,t,r))){if(n||(l=t.line+r)=e.first+e.size||(t=new et(l,t.ch,t.sticky),!(s=Xe(e,l))))return!1;t=qo(i,e.cm,s,t.line,r)}else t=o;return!0}if("char"==n)a();else if("column"==n)a(!0);else if("word"==n||"group"==n)for(var u=null,c="group"==n,h=e.cm&&e.cm.getHelper(t,"wordChars"),f=!0;!(r<0)||a(!f);f=!1){var d=s.text.charAt(t.ch)||"\n",p=te(d,h)?"w":c&&"\n"==d?"n":!c||/\s/.test(d)?null:"p";if(!c||f||p||(p="s"),u&&u!=p){r<0&&(r=1,a(),t.sticky="after");break}if(p&&(u=p),r>0&&!a(!f))break}var g=to(e,t,o,l,!0);return rt(o,g)&&(g.hitSide=!0),g}function Pl(e,t,r,n){var i,o,l=e.doc,s=t.left;if("page"==n){var a=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),u=Math.max(a-.5*en(e.display),3);i=(r>0?t.bottom:t.top)+r*u}else"line"==n&&(i=r>0?t.bottom+3:t.top-3);for(;(o=$r(e,s,i)).outside;){if(r<0?i<=0:i>=l.height){o.hitSide=!0;break}i+=5*r}return o}var El=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new R,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Il(e,t){var r=Ar(e,t.line);if(!r||r.hidden)return null;var n=Xe(e.doc,t.line),i=Nr(r,n,t.line),o=ce(n,e.doc.direction),l="left";o&&(l=ae(o,t.ch)%2?"right":"left");var s=Pr(i.map,t.ch,l);return s.offset="right"==s.collapse?s.end:s.start,s}function zl(e,t){return t&&(e.bad=!0),e}function Rl(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return zl(e.clipPos(et(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||o.line=t.display.viewFrom&&Il(t,i)||{node:a[0].measure.map[2],offset:0},c=o.linen.firstLine()&&(l=et(l.line-1,Xe(n.doc,l.line-1).length)),s.ch==Xe(n.doc,s.line).text.length&&s.linei.viewTo-1)return!1;l.line==i.viewFrom||0==(e=an(n,l.line))?(t=qe(i.view[0].line),r=i.view[0].node):(t=qe(i.view[e].line),r=i.view[e-1].node.nextSibling);var a,u,c=an(n,s.line);if(c==i.view.length-1?(a=i.viewTo-1,u=i.lineDiv.lastChild):(a=qe(i.view[c+1].line)-1,u=i.view[c+1].node.previousSibling),!r)return!1;for(var h=n.doc.splitLines(function(e,t,r,n,i){var o="",l=!1,s=e.doc.lineSeparator(),a=!1;function u(){l&&(o+=s,a&&(o+=s),l=a=!1)}function c(e){e&&(u(),o+=e)}function h(t){if(1==t.nodeType){var r=t.getAttribute("cm-text");if(r)return void c(r);var o,f=t.getAttribute("cm-marker");if(f){var d=e.findMarks(et(n,0),et(i+1,0),(v=+f,function(e){return e.id==v}));return void(d.length&&(o=d[0].find(0))&&c(Ye(e.doc,o.from,o.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var p=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;p&&u();for(var g=0;g1&&f.length>1;)if($(h)==$(f))h.pop(),f.pop(),a--;else{if(h[0]!=f[0])break;h.shift(),f.shift(),t++}for(var d=0,p=0,g=h[0],v=f[0],m=Math.min(g.length,v.length);dl.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)d--,p++;h[h.length-1]=y.slice(0,y.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(d).replace(/\u200b+$/,"");var x=et(t,d),C=et(a,f.length?$(f).length-p:0);return h.length>1||h[0]||tt(x,C)?(co(n.doc,h,x,C,"+input"),!0):void 0},El.prototype.ensurePolled=function(){this.forceCompositionEnd()},El.prototype.reset=function(){this.forceCompositionEnd()},El.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},El.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},El.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||qn(this.cm,function(){return un(e.cm)})},El.prototype.setUneditable=function(e){e.contentEditable="false"},El.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||Zn(this.cm,Nl)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},El.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},El.prototype.onContextMenu=function(){},El.prototype.resetPosition=function(){},El.prototype.needsContentAttribute=!0;var Gl=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new R,this.hasSelection=!1,this.composing=null};Gl.prototype.init=function(e){var t=this,r=this,n=this.cm;this.createField(e);var i=this.textarea;function o(e){if(!ve(n,e)){if(n.somethingSelected())Ml({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var t=Dl(n);Ml({lineWise:!0,text:t.text}),"cut"==e.type?n.setSelections(t.ranges,null,V):(r.prevInput="",i.value=t.text.join("\n"),P(i))}"cut"==e.type&&(n.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(i.style.width="0px"),fe(i,"input",function(){l&&s>=9&&t.hasSelection&&(t.hasSelection=null),r.poll()}),fe(i,"paste",function(e){ve(n,e)||Ol(e,n)||(n.state.pasteIncoming=+new Date,r.fastPoll())}),fe(i,"cut",o),fe(i,"copy",o),fe(e.scroller,"paste",function(t){if(!xr(e,t)&&!ve(n,t)){if(!i.dispatchEvent)return n.state.pasteIncoming=+new Date,void r.focus();var o=new Event("paste");o.clipboardData=t.clipboardData,i.dispatchEvent(o)}}),fe(e.lineSpace,"selectstart",function(t){xr(e,t)||we(t)}),fe(i,"compositionstart",function(){var e=n.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:n.markText(e,n.getCursor("to"),{className:"CodeMirror-composing"})}}),fe(i,"compositionend",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},Gl.prototype.createField=function(e){this.wrapper=Hl(),this.textarea=this.wrapper.firstChild},Gl.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=gn(e);if(e.options.moveInputWithCursor){var i=Xr(e,r.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return n},Gl.prototype.showSelection=function(e){var t=this.cm.display;N(t.cursorDiv,e.cursors),N(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Gl.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var r=t.getSelection();this.textarea.value=r,t.state.focused&&P(this.textarea),l&&s>=9&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value="",l&&s>=9&&(this.hasSelection=null))}},Gl.prototype.getField=function(){return this.textarea},Gl.prototype.supportsTouch=function(){return!1},Gl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!m||W()!=this.textarea))try{this.textarea.focus()}catch(e){}},Gl.prototype.blur=function(){this.textarea.blur()},Gl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Gl.prototype.receivedFocus=function(){this.slowPoll()},Gl.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},Gl.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,function r(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,r))})},Gl.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||He(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(l&&s>=9&&this.hasSelection===i||y&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var a=0,u=Math.min(n.length,i.length);a1e3||i.indexOf("\n")>-1?r.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},Gl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Gl.prototype.onKeyPress=function(){l&&s>=9&&(this.hasSelection=null),this.fastPoll()},Gl.prototype.onContextMenu=function(e){var t=this,r=t.cm,n=r.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=sn(r,e),u=n.scroller.scrollTop;if(o&&!h){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(o)&&Zn(r,$i)(r.doc,xi(o),V);var c,f=i.style.cssText,d=t.wrapper.style.cssText,p=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",i.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-p.top-5)+"px; left: "+(e.clientX-p.left-5)+"px;\n z-index: 1000; background: "+(l?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",a&&(c=window.scrollY),n.input.focus(),a&&window.scrollTo(null,c),n.input.reset(),r.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=m,n.selForContextMenu=r.doc.sel,clearTimeout(n.detectingSelectAll),l&&s>=9&&v(),S){Se(e);var g=function(){pe(window,"mouseup",g),setTimeout(m,20)};fe(window,"mouseup",g)}else setTimeout(m,50)}function v(){if(null!=i.selectionStart){var e=r.somethingSelected(),o="​"+(e?i.value:"");i.value="⇚",i.value=o,t.prevInput=e?"":"​",i.selectionStart=1,i.selectionEnd=o.length,n.selForContextMenu=r.doc.sel}}function m(){if(t.contextMenuPending==m&&(t.contextMenuPending=!1,t.wrapper.style.cssText=d,i.style.cssText=f,l&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=u),null!=i.selectionStart)){(!l||l&&s<9)&&v();var e=0,o=function(){n.selForContextMenu==r.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&"​"==t.prevInput?Zn(r,no)(r):e++<10?n.detectingSelectAll=setTimeout(o,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(o,200)}}},Gl.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},Gl.prototype.setUneditable=function(){},Gl.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function r(r,n,i,o){e.defaults[r]=n,i&&(t[r]=o?function(e,t,r){r!=yl&&i(e,t,r)}:i)}e.defineOption=r,e.Init=yl,r("value","",function(e,t){return e.setValue(t)},!0),r("mode",null,function(e,t){e.doc.modeOption=t,Ti(e)},!0),r("indentUnit",2,Ti,!0),r("indentWithTabs",!1),r("smartIndent",!0),r("tabSize",4,function(e){Mi(e),Rr(e),un(e)},!0),r("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var r=[],n=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,r.push(et(n,o))}n++});for(var i=r.length-1;i>=0;i--)co(e.doc,t,r[i],et(r[i].line,r[i].ch+t.length))}}),r("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),r!=yl&&e.refresh()}),r("specialCharPlaceholder",Qt,function(e){return e.refresh()},!0),r("electricChars",!0),r("inputStyle",m?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),r("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),r("autocorrect",!1,function(e,t){return e.getInputField().autocorrect=t},!0),r("autocapitalize",!1,function(e,t){return e.getInputField().autocapitalize=t},!0),r("rtlMoveVisually",!w),r("wholeLineUpdateBefore",!0),r("theme","default",function(e){ml(e),fi(e)},!0),r("keyMap","default",function(e,t,r){var n=Xo(t),i=r!=yl&&Xo(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)}),r("extraKeys",null),r("configureMouse",null),r("lineWrapping",!1,Cl,!0),r("gutters",[],function(e,t){e.display.gutterSpecs=ci(t,e.options.lineNumbers),fi(e)},!0),r("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?nn(e.display)+"px":"0",e.refresh()},!0),r("coverGutterNextToScrollbar",!1,function(e){return Rn(e)},!0),r("scrollbarStyle","native",function(e){Un(e),Rn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),r("lineNumbers",!1,function(e,t){e.display.gutterSpecs=ci(e.options.gutters,t),fi(e)},!0),r("firstLineNumber",1,fi,!0),r("lineNumberFormatter",function(e){return e},fi,!0),r("showCursorWhenSelecting",!1,pn,!0),r("resetSelectionOnContextMenu",!0),r("lineWiseCopyCut",!0),r("pasteLinesPerSelection",!0),r("selectionsMayTouch",!1),r("readOnly",!1,function(e,t){"nocursor"==t&&(Sn(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),r("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),r("dragDrop",!0,xl),r("allowDropFileTypes",null),r("cursorBlinkRate",530),r("cursorScrollMargin",0),r("cursorHeight",1,pn,!0),r("singleCursorHeightPerLine",!0,pn,!0),r("workTime",100),r("workDelay",100),r("flattenSpans",!0,Mi,!0),r("addModeClass",!1,Mi,!0),r("pollInterval",100),r("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),r("historyEventDelay",1250),r("viewportMargin",10,function(e){return e.refresh()},!0),r("maxHighlightLength",1e4,Mi,!0),r("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),r("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),r("autofocus",null),r("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0),r("phrases",null)}(Sl),function(e){var t=e.optionHandlers,r=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,r){var n=this.options,i=n[e];n[e]==r&&"mode"!=e||(n[e]=r,t.hasOwnProperty(e)&&Zn(this,t[e])(this,r,i),ge(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Xo(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;rr&&(kl(this,i.head.line,e,!0),r=i.head.line,n==this.doc.sel.primIndex&&On(this));else{var o=i.from(),l=i.to(),s=Math.max(r,o.line);r=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1;for(var a=s;a0&&Xi(this.doc,n,new bi(o,u[n].to()),V)}}}),getTokenAt:function(e,t){return yt(this,e,t)},getLineTokens:function(e,t){return yt(this,et(e),t,!0)},getTokenTypeAt:function(e){e=st(this.doc,e);var t,r=ft(this,Xe(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var l=n+i>>1;if((l?r[2*l-1]:0)>=o)i=l;else{if(!(r[2*l+1]o&&(e=o,i=!0),n=Xe(this.doc,e)}else n=e;return Vr(this,n,{top:0,left:0},t||"page",r||i).top+(i?this.doc.height-Vt(n):0)},defaultTextHeight:function(){return en(this.display)},defaultCharWidth:function(){return tn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o,l,s,a=this.display,u=(e=Xr(this,st(this.doc,e))).bottom,c=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),a.sizer.appendChild(t),"over"==n)u=e.top;else if("above"==n||"near"==n){var h=Math.max(a.wrapper.clientHeight,this.doc.height),f=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||e.bottom+t.offsetHeight>h)&&e.top>t.offsetHeight?u=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=h&&(u=e.bottom),c+t.offsetWidth>f&&(c=f-t.offsetWidth)}t.style.top=u+"px",t.style.left=t.style.right="","right"==i?(c=a.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?c=0:"middle"==i&&(c=(a.sizer.clientWidth-t.offsetWidth)/2),t.style.left=c+"px"),r&&(o=this,l={left:c,top:u,right:c+t.offsetWidth,bottom:u+t.offsetHeight},null!=(s=Mn(o,l)).scrollTop&&Hn(o,s.scrollTop),null!=s.scrollLeft&&Pn(o,s.scrollLeft))},triggerOnKeyDown:Qn(ll),triggerOnKeyPress:Qn(al),triggerOnKeyUp:sl,triggerOnMouseDown:Qn(fl),execCommand:function(e){if(Zo.hasOwnProperty(e))return Zo[e].call(null,this)},triggerElectric:Qn(function(e){Al(this,e)}),findPosH:function(e,t,r,n){var i=1;t<0&&(i=-1,t=-t);for(var o=st(this.doc,e),l=0;l0&&l(t.charAt(r-1));)--r;for(;n.5)&&ln(this),ge(this,"refresh",this)}),swapDoc:Qn(function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Di(this,e),Rr(this),this.display.input.reset(),An(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,sr(this,"swapDoc",this,t),t}),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},be(e),e.registerHelper=function(t,n,i){r.hasOwnProperty(t)||(r[t]=e[t]={_global:[]}),r[t][n]=i},e.registerGlobalHelper=function(t,n,i,o){e.registerHelper(t,n,o),r[t]._global.push({pred:i,val:o})}}(Sl);var Ul="iter insert remove copy getEditor constructor".split(" ");for(var Vl in Mo.prototype)Mo.prototype.hasOwnProperty(Vl)&&B(Ul,Vl)<0&&(Sl.prototype[Vl]=function(e){return function(){return e.apply(this.doc,arguments)}}(Mo.prototype[Vl]));return be(Mo),Sl.inputStyles={textarea:Gl,contenteditable:El},Sl.defineMode=function(e){Sl.defaults.mode||"null"==e||(Sl.defaults.mode=e),function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Ee[e]=t}.apply(this,arguments)},Sl.defineMIME=function(e,t){Ie[e]=t},Sl.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),Sl.defineMIME("text/plain","null"),Sl.defineExtension=function(e,t){Sl.prototype[e]=t},Sl.defineDocExtension=function(e,t){Mo.prototype[e]=t},Sl.fromTextArea=function(e,t){if((t=t?I(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var r=W();t.autofocus=r==e||null!=e.getAttribute("autofocus")&&r==document.body}function n(){e.value=s.getValue()}var i;if(e.form&&(fe(e.form,"submit",n),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var l=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=l}}catch(e){}}t.finishInit=function(r){r.save=n,r.getTextArea=function(){return e},r.toTextArea=function(){r.toTextArea=isNaN,n(),e.parentNode.removeChild(r.getWrapperElement()),e.style.display="",e.form&&(pe(e.form,"submit",n),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=i))}},e.style.display="none";var s=Sl(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return s},function(e){e.off=pe,e.on=fe,e.wheelEventPixels=vi,e.Doc=Mo,e.splitLines=We,e.countColumn=z,e.findColumn=X,e.isWordChar=ee,e.Pass=U,e.signal=ge,e.Line=Xt,e.changeEnd=Ci,e.scrollbarModel=Gn,e.Pos=et,e.cmpPos=tt,e.modes=Ee,e.mimeModes=Ie,e.resolveMode=ze,e.getMode=Re,e.modeExtensions=Be,e.extendMode=Ge,e.copyState=Ue,e.startState=Ke,e.innerMode=Ve,e.commands=Zo,e.keyMap=Ro,e.keyName=jo,e.isModifierKey=Vo,e.lookupKey=Uo,e.normalizeKeyMap=Go,e.StringStream=je,e.SharedTextMarker=So,e.TextMarker=xo,e.LineWidget=yo,e.e_preventDefault=we,e.e_stopPropagation=xe,e.e_stop=Se,e.addClass=H,e.contains=D,e.rmClass=T,e.keyNames=Po}(Sl),Sl.version="5.49.2",Sl}); \ No newline at end of file diff --git a/luci-app-adguardhome/root/www/luci-static/resources/codemirror/mode/yaml/yaml.js b/luci-app-adguardhome/root/www/luci-static/resources/codemirror/mode/yaml/yaml.js new file mode 100755 index 000000000..4a5e499bf --- /dev/null +++ b/luci-app-adguardhome/root/www/luci-static/resources/codemirror/mode/yaml/yaml.js @@ -0,0 +1 @@ +!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";e.defineMode("yaml",function(){var e=new RegExp("\\b(("+["true","false","on","off","yes","no"].join(")|(")+"))$","i");return{token:function(i,t){var r=i.peek(),n=t.escaped;if(t.escaped=!1,"#"==r&&(0==i.pos||/\s/.test(i.string.charAt(i.pos-1))))return i.skipToEnd(),"comment";if(i.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/))return"string";if(t.literal&&i.indentation()>t.keyCol)return i.skipToEnd(),"string";if(t.literal&&(t.literal=!1),i.sol()){if(t.keyCol=0,t.pair=!1,t.pairStart=!1,i.match(/---/))return"def";if(i.match(/\.\.\./))return"def";if(i.match(/\s*-\s+/))return"meta"}if(i.match(/^(\{|\}|\[|\])/))return"{"==r?t.inlinePairs++:"}"==r?t.inlinePairs--:"["==r?t.inlineList++:t.inlineList--,"meta";if(t.inlineList>0&&!n&&","==r)return i.next(),"meta";if(t.inlinePairs>0&&!n&&","==r)return t.keyCol=0,t.pair=!1,t.pairStart=!1,i.next(),"meta";if(t.pairStart){if(i.match(/^\s*(\||\>)\s*/))return t.literal=!0,"meta";if(i.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2";if(0==t.inlinePairs&&i.match(/^\s*-?[0-9\.\,]+\s?$/))return"number";if(t.inlinePairs>0&&i.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number";if(i.match(e))return"keyword"}return!t.pair&&i.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)?(t.pair=!0,t.keyCol=i.indentation(),"atom"):t.pair&&i.match(/^:\s*/)?(t.pairStart=!0,"meta"):(t.pairStart=!1,t.escaped="\\"==r,i.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}},lineComment:"#",fold:"indent"}}),e.defineMIME("text/x-yaml","yaml"),e.defineMIME("text/yaml","yaml")}); \ No newline at end of file diff --git a/luci-app-adguardhome/root/www/luci-static/resources/codemirror/theme/dracula.css b/luci-app-adguardhome/root/www/luci-static/resources/codemirror/theme/dracula.css new file mode 100755 index 000000000..6c708c010 --- /dev/null +++ b/luci-app-adguardhome/root/www/luci-static/resources/codemirror/theme/dracula.css @@ -0,0 +1 @@ +.cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:0}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,0.10)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,0.10)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,0.10)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:white}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-keyword{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute{color:#50fa7b}.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-variable-3,.cm-s-dracula span.cm-type{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,0.1)}.cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:white !important} diff --git a/luci-app-adguardhome/root/www/luci-static/resources/twin-bcrypt.min.js b/luci-app-adguardhome/root/www/luci-static/resources/twin-bcrypt.min.js new file mode 100755 index 000000000..6284357c6 --- /dev/null +++ b/luci-app-adguardhome/root/www/luci-static/resources/twin-bcrypt.min.js @@ -0,0 +1,7 @@ +/* @license + * Twin-Bcrypt 2.2.0 + * https://github.com/fpirsch/twin-bcrypt + * Licence: BSD-3-Clause + */ +!function(r,n){"use strict";function e(r){return y[g]=t.apply(n,r),g++}function t(r){var e=[].slice.call(arguments,1);return function(){"function"==typeof r?r.apply(n,e):new Function(""+r)()}}function o(r){if(m)setTimeout(t(o,r),0);else{var n=y[r];if(n){m=!0;try{n()}finally{a(r),m=!1}}}}function a(r){delete y[r]}function i(){p=function(){var r=e(arguments);return process.nextTick(t(o,r)),r}}function u(){if(r.postMessage&&!r.importScripts){var n=!0,e=r.onmessage;return r.onmessage=function(){n=!1},r.postMessage("","*"),r.onmessage=e,n}}function f(){var n="setImmediate$"+Math.random()+"$",t=function(e){e.source===r&&"string"==typeof e.data&&0===e.data.indexOf(n)&&o(+e.data.slice(n.length))};r.addEventListener?r.addEventListener("message",t,!1):r.attachEvent("onmessage",t),p=function(){var t=e(arguments);return r.postMessage(n+t,"*"),t}}function c(){var r=new MessageChannel;r.port1.onmessage=function(r){var n=r.data;o(n)},p=function(){var n=e(arguments);return r.port2.postMessage(n),n}}function s(){var r=v.documentElement;p=function(){var n=e(arguments),t=v.createElement("script");return t.onreadystatechange=function(){o(n),t.onreadystatechange=null,r.removeChild(t),t=null},r.appendChild(t),n}}function l(){p=function(){var r=e(arguments);return setTimeout(t(o,r),0),r}}if(!r.setImmediate){var p,g=1,y={},m=!1,v=r.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(r);d=d&&d.setTimeout?d:r,"[object process]"==={}.toString.call(r.process)?i():u()?f():r.MessageChannel?c():v&&"onreadystatechange"in v.createElement("script")?s():l(),d.setImmediate=p,d.clearImmediate=a}}(new Function("return this")()),function(r){"object"==typeof exports?r(exports,require("crypto")):r(self.TwinBcrypt={},self.crypto||self.msCrypto)}(function(r,n){"use strict";function e(r){for(var n=unescape(encodeURIComponent(r)),e=n.length,t=new Array(e),o=0;e>o;o++)t[o]=n.charCodeAt(o);return t}function t(r){for(var n=r.length,e=new Array(n),t=0;n>t;t++)e[t]=r.charCodeAt(t);return e}function o(r,n){for(var e,t,o=0,a="";n>o;){if(e=255&r[o++],a+=B[e>>2],e=(3&e)<<4,o>=n){a+=B[e];break}if(t=255&r[o++],e|=t>>4,a+=B[e],e=(15&t)<<2,o>=n){a+=B[e];break}t=255&r[o++],e|=t>>6,a+=B[e],a+=B[63&t]}return a}function a(r){for(var n,e,t=new Array(16),o=0,a=0;;){if(n=D[r.charCodeAt(o++)-46],e=D[r.charCodeAt(o++)-46],t[a++]=255&(n<<2|e>>4),22===o)break;n=e<<4,e=D[r.charCodeAt(o++)-46],t[a++]=255&(n|e>>2),n=e<<6,e=D[r.charCodeAt(o++)-46],t[a++]=255&(n|e)}return t}function i(r){for(var n=r.length,e=new Array(72),t=0,o=0;72>o;)e[o++]=r[t++],t===n&&(t=0);return e}function u(r,n,e){for(var t=0,o=e>>2;tt;)r[n++]=e[t++]<<24|e[t++]<<16|e[t++]<<8|e[t++]}function c(r){function n(n){for(var e=r,t=G>>2,o=t|O,f=n>>2,c=e[f]^e[t],s=e[1|f];o>t;)s^=(e[c>>>24]+e[a|c>>>16&255]^e[i|c>>>8&255])+e[u|255&c]^e[++t],c^=(e[s>>>24]+e[a|s>>>16&255]^e[i|s>>>8&255])+e[u|255&s]^e[++t];e[f]=s^e[S>>2],e[1|f]=c}function e(n){var e;for(r[L>>2]=0,r[L+4>>2]=0,e=0;M>e;e++)r[G>>2|e]^=r[(n>>2)+e];var t,o,f,c,s,l=r;for(e=0;M>e;e+=2){for(t=G>>2,o=t|O,f=L>>2,c=l[f]^l[t],s=l[1|f];o>t;)s^=(l[c>>>24]+l[a|c>>>16&255]^l[i|c>>>8&255])+l[u|255&c]^l[++t],c^=(l[s>>>24]+l[a|s>>>16&255]^l[i|s>>>8&255])+l[u|255&s]^l[++t];l[f]=s^l[S>>2],l[1|f]=c,r[G>>2|e]=l[f],r[G>>2|e+1]=c}for(e=0;T>e;e+=2){for(t=G>>2,o=t|O,f=L>>2,c=l[f]^l[t],s=l[1|f];o>t;)s^=(l[c>>>24]+l[a|c>>>16&255]^l[i|c>>>8&255])+l[u|255&c]^l[++t],c^=(l[s>>>24]+l[a|s>>>16&255]^l[i|s>>>8&255])+l[u|255&s]^l[++t];l[f]=s^l[S>>2],l[1|f]=c,r[e]=l[f],r[1|e]=c}}function t(r,n,t){for(var o=0;t>=o&&!(r>n);o++)e(R),e(j),r++;return r}var o=k>>2,a=o+256|0,i=a+256|0,u=i+256|0;return{encrypt:n,expandLoop:t}}function s(stdlib, foreign, heap) {"use asm";var HEAP32=new stdlib.Uint32Array(heap);var BLOWFISH_NUM_ROUNDS=16;var S_offset=0x0000;var S1_offset=0x0400;var S2_offset=0x0800;var S3_offset=0x0C00;var P_offset=0x1000;var P_last_offset=0x1044;var crypt_ciphertext_offset=0x1048;var LR_offset=0x01060;var password_offset=0x1068;var salt_offset=0x10b0;var P_LEN=18;var S_LEN=1024;function encrypt(offset) {offset=offset|0;var i=0;var n=0;var L=0;var R=0;var imax=0;imax=P_offset|BLOWFISH_NUM_ROUNDS<<2;L=HEAP32[offset>>2]|0;R=HEAP32[offset+4>>2]|0;L=L^HEAP32[P_offset>>2];for (i=P_offset; (i|0)<(imax|0);) {i=(i+4)>>>0;R=R^(((HEAP32[(L>>>22)>>2]>>>0) +(HEAP32[(S1_offset|(L>>>14&0x3ff))>>2]>>>0) ^(HEAP32[(S2_offset|(L>>>6&0x3ff))>>2])) +(HEAP32[(S3_offset|(L<<2&0x3ff))>>2]>>>0))^HEAP32[i>>2];i=(i+4)>>>0;L=L^(((HEAP32[(R>>>22)>>2]>>>0) +(HEAP32[(S1_offset|(R>>>14&0x3ff))>>2]>>>0) ^(HEAP32[(S2_offset|(R>>>6&0x3ff))>>2])) +(HEAP32[(S3_offset|(R<<2&0x3ff))>>2]>>>0))^HEAP32[i>>2];}HEAP32[offset>>2]=R^HEAP32[P_last_offset>>2];HEAP32[(offset+4)>>2]=L;}function expandKey(offset) {offset=offset|0;var i=0;var off=0;off=P_offset|0;for (i=0; (i|0)<(P_LEN|0); i=(i+1)|0) {HEAP32[off>>2]=HEAP32[off>>2]^HEAP32[offset>>2];offset=(offset+4)|0;off=(off+4)|0;}HEAP32[LR_offset>>2]=0;HEAP32[LR_offset+4>>2]=0;off=P_offset;for (i=0; (i|0)<(P_LEN|0); i=(i+2)|0) {encrypt(LR_offset);HEAP32[off>>2]=HEAP32[LR_offset>>2];HEAP32[off+4>>2]=HEAP32[LR_offset+4>>2];off=(off+8)|0;}off=S_offset;for (i=0; (i|0)<(S_LEN|0); i=(i+2)|0) {encrypt(LR_offset);HEAP32[off>>2]=HEAP32[LR_offset>>2];HEAP32[off+4>>2]=HEAP32[LR_offset+4>>2];off=(off+8)|0;}}function expandLoop(i, counterEnd, maxIterations) {i=i|0;counterEnd=counterEnd|0;maxIterations=maxIterations|0;var j=0;for (j=0; (j|0) <= (maxIterations|0); j=(j+1)|0) {if ((i>>>0)>(counterEnd>>>0)) break;expandKey(password_offset);expandKey(salt_offset);i=(i+1)>>>0;}return i|0;}return {encrypt: encrypt,expandLoop: expandLoop};} +function l(r,n,e,t){var o,a,i,u=L>>2,f=u+1;for(t[u]=0,t[f]=0,a=0,o=0;M>o;o++)i=n[a++]<<24|n[a++]<<16|n[a++]<<8|n[a++],t[G>>2|o]^=i;for(a=0,o=0;M>o;o+=2)i=r[a++]<<24|r[a++]<<16|r[a++]<<8|r[a++],a&=65295,t[u]^=i,i=r[a++]<<24|r[a++]<<16|r[a++]<<8|r[a++],a&=65295,t[f]^=i,e.encrypt(L),t[G>>2|o]=t[u],t[G>>2|o+1]=t[f];var c=k>>2;for(o=0;T>o;o+=2)i=r[a++]<<24|r[a++]<<16|r[a++]<<8|r[a++],a&=65295,t[u]^=i,i=r[a++]<<24|r[a++]<<16|r[a++]<<8|r[a++],a&=65295,t[f]^=i,e.encrypt(L),t[c|o]=t[u],t[c|o+1]=t[f]}function p(r,n,e,t,o,a,i){for(var u=e;t>=u;){if(u=r.expandLoop(u,t,o),a){var f=a(u/(t+1));if(f===!1)return}if(u>t){if(i)return void setImmediate(g.bind(null,r,n,i));return}if(i)return void setImmediate(p.bind(null,r,n,u,t,o,a,i))}}function g(r,n,e){u(n,x,F);var t;for(t=0;64>t;t++)r.encrypt(F+0),r.encrypt(F+8),r.encrypt(F+16);var o,a=0,i=x.length,f=new Array(4*i);for(t=0;i>t;t++)o=n[(F>>2)+t],f[a++]=o>>24,f[a++]=o>>16&255,f[a++]=o>>8&255,f[a++]=255&o;return e&&e(f),f}function y(r,n){return r+o(n,23)}function m(n,o,m,v){var d,h=o.substr(0,29),w=+o.substr(4,2),A=o.substr(7,22);if("string"==typeof n)d=r.encodingMode===r.ENCODING_UTF8?e(n):t(n);else if(Array.isArray(n))d=n.map(function(r){return 255&r});else{if(!(n instanceof Uint8Array))throw new Error("Incorrect arguments");d=Array.prototype.slice.call(n)}d.push(0);var b,E,N=a(A,C),O=31>w?1<>2,N),f(b,R>>2,d),l(N,d,E,b),v?void p(E,b,0,M,T,m,function(r){v(y(h,r))}):(p(E,b,0,M,T,m),y(h,g(E,b)))}function v(r){if(!b)throw new Error("No cryptographically secure pseudorandom number generator available.");if(null==r&&(r=N),r=0|+r,isNaN(r)||4>r||r>31)throw new Error("Invalid cost parameter.");var n="$2y$";return 10>r&&(n+="0"),n+=r+"$",n+=o(b(C),C)}function d(r,n,e){if(n&&"number"!=typeof n){if("string"!=typeof n||!z.test(n))throw new Error("Invalid salt")}else n=v(n);return m(r,n,e)}function h(r,n,e,t){if(arguments.length<2)throw new Error("Incorrect arguments");if(2===arguments.length?(t=n,n=e=null):3===arguments.length&&(t=e,e=null,"function"==typeof n&&(e=n,n=null)),n&&"number"!=typeof n){if("string"!=typeof n||!z.test(n))throw new Error("Invalid salt")}else n=v(n);if(!t||"function"!=typeof t)throw new Error("No callback function was given.");m(r,n,e,t)}function w(r,n){if("string"!=typeof n||!Z.test(n))throw new Error("Incorrect arguments");var e=n.substr(0,n.length-31),t=d(r,e);return t===n}function A(r,n,e,t){if("string"!=typeof n||!Z.test(n))throw new Error("Incorrect arguments");if(t||(t=e,e=null),!t||"function"!=typeof t)throw new Error("No callback function was given.");var o=n.substr(0,n.length-31);h(r,o,e,function(r){t(r===n)})}var b,E="undefined"!=typeof InstallTrigger,I=E;n&&(b=n.randomBytes,n.getRandomValues&&(b=function(r){var e=new Uint8Array(r);return n.getRandomValues(e)}));var C=16,N=10,O=16,$=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],U=[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946,1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055,3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504,976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462],M=$.length,T=U.length,x=[1332899944,1700884034,1701343084,1684370003,1668446532,1869963892],k=0,G=4096,S=4164,F=4168,L=4192,R=4200,j=4272,B="./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",D=[0,1,54,55,56,57,58,59,60,61,62,63,-1,-1,-1,-1,-1,-1,-1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,-1,-1,-1,-1,-1,-1,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,-1,-1,-1,-1,-1],z=/^\$2[ay]\$(0[4-9]|[12][0-9]|3[01])\$[.\/A-Za-z0-9]{21}[.Oeu]/,Z=/^\$2[ay]\$(0[4-9]|[12][0-9]|3[01])\$[.\/A-Za-z0-9]{21}[.Oeu][.\/A-Za-z0-9]{30}[.CGKOSWaeimquy26]$/;r.genSalt=v,r.hashSync=d,r.hash=h,r.compareSync=w,r.compare=A,r.ENCODING_UTF8=0,r.ENCODING_RAW=1,r.encodingMode=r.ENCODING_UTF8,r.cryptoRNG=!!b,r.randomBytes=b,r.defaultCost=N,r.version="2.2.0"}); \ No newline at end of file diff --git a/luci-app-cpufreq/Makefile b/luci-app-cpufreq/Makefile new file mode 100755 index 000000000..b85e91d22 --- /dev/null +++ b/luci-app-cpufreq/Makefile @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: GPL-3.0-only +# +# Copyright (C) 2021 ImmortalWrt.org + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI for CPU Freq Setting +LUCI_DEPENDS:=@(arm||aarch64) + +PKG_NAME:=luci-app-cpufreq +PKG_VERSION:=1 +PKG_RELEASE:=$(COMMITCOUNT) + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-cpufreq/luasrc/controller/cpufreq.lua b/luci-app-cpufreq/luasrc/controller/cpufreq.lua new file mode 100755 index 000000000..2bf7a5686 --- /dev/null +++ b/luci-app-cpufreq/luasrc/controller/cpufreq.lua @@ -0,0 +1,11 @@ +module("luci.controller.cpufreq", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/cpufreq") then + return + end + + local page = entry({"admin", "system", "cpufreq"}, cbi("cpufreq"), _("CPU Freq"), 90) + page.dependent = false + page.acl_depends = { "luci-app-cpufreq" } +end diff --git a/luci-app-cpufreq/luasrc/model/cbi/cpufreq.lua b/luci-app-cpufreq/luasrc/model/cbi/cpufreq.lua new file mode 100755 index 000000000..febb7ad90 --- /dev/null +++ b/luci-app-cpufreq/luasrc/model/cbi/cpufreq.lua @@ -0,0 +1,68 @@ +local fs = require "nixio.fs" + +function string.split(input, delimiter) + input = tostring(input) + delimiter = tostring(delimiter) + if (delimiter=='') then return false end + local pos,arr = 0, {} + for st,sp in function() return string.find(input, delimiter, pos, true) end do + table.insert(arr, string.sub(input, pos, st - 1)) + pos = sp + 1 + end + table.insert(arr, string.sub(input, pos)) + return arr +end + +mp = Map("cpufreq", translate("CPU Freq Settings")) +mp.description = translate("Set CPU Scaling Governor to Max Performance or Balance Mode") + +s = mp:section(NamedSection, "cpufreq", "settings") +s.anonymouse = true + +local policy_nums = luci.sys.exec("echo -n $(find /sys/devices/system/cpu/cpufreq/policy* -maxdepth 0 | grep -Eo '[0-9]+')") +for _, policy_num in ipairs(string.split(policy_nums, " ")) do + if not fs.access("/sys/devices/system/cpu/cpufreq/policy" .. policy_num .. "/scaling_available_frequencies") then return end + + cpu_freqs = fs.readfile("/sys/devices/system/cpu/cpufreq/policy" .. policy_num .. "/scaling_available_frequencies") + cpu_freqs = string.sub(cpu_freqs, 1, -3) + + cpu_governors = fs.readfile("/sys/devices/system/cpu/cpufreq/policy" .. policy_num .. "/scaling_available_governors") + cpu_governors = string.sub(cpu_governors, 1, -3) + + + freq_array = string.split(cpu_freqs, " ") + governor_array = string.split(cpu_governors, " ") + + s:tab(policy_num, translate("Policy " .. policy_num)) + + governor = s:taboption(policy_num, ListValue, "governor" .. policy_num, translate("CPU Scaling Governor")) + for _, e in ipairs(governor_array) do + if e ~= "" then governor:value(e, translate(e, string.upper(e))) end + end + + minfreq = s:taboption(policy_num, ListValue, "minfreq" .. policy_num, translate("Min Idle CPU Freq")) + for _, e in ipairs(freq_array) do + if e ~= "" then minfreq:value(e) end + end + + maxfreq = s:taboption(policy_num, ListValue, "maxfreq" .. policy_num, translate("Max Turbo Boost CPU Freq")) + for _, e in ipairs(freq_array) do + if e ~= "" then maxfreq:value(e) end + end + + sdfactor = s:taboption(policy_num, Value, "sdfactor" .. policy_num, translate("CPU Switching Sampling rate")) + sdfactor.datatype="range(1,100000)" + sdfactor.description = translate("The sampling rate determines how frequently the governor checks to tune the CPU (ms)") + sdfactor.placeholder = 10 + sdfactor.default = 10 + sdfactor:depends("governor" .. policy_num, "ondemand") + + upthreshold = s:taboption(policy_num, Value, "upthreshold" .. policy_num, translate("CPU Switching Threshold")) + upthreshold.datatype="range(1,99)" + upthreshold.description = translate("Kernel make a decision on whether it should increase the frequency (%)") + upthreshold.placeholder = 50 + upthreshold.default = 50 + upthreshold:depends("governor" .. policy_num, "ondemand") +end + +return mp diff --git a/luci-app-cpufreq/po/zh-cn/cpufreq.po b/luci-app-cpufreq/po/zh-cn/cpufreq.po new file mode 100755 index 000000000..bd818d774 --- /dev/null +++ b/luci-app-cpufreq/po/zh-cn/cpufreq.po @@ -0,0 +1,32 @@ +msgid "CPU Freq" +msgstr "CPU 性能优化调节" + +msgid "CPU Freq Settings" +msgstr "CPU 性能优化调节设置" + +msgid "Set CPU Scaling Governor to Max Performance or Balance Mode" +msgstr "设置路由器的 CPU 性能模式(高性能/均衡省电)" + +msgid "CPU Scaling Governor" +msgstr "CPU 工作模式" + +msgid "CPU Freq from 48000 to 716000 (Khz)" +msgstr "CPU 频率范围为 48000 到 716000 (Khz)" + +msgid "Min Idle CPU Freq" +msgstr "待机 CPU 最小频率" + +msgid "Max Turbo Boost CPU Freq" +msgstr "最大 Turbo Boost CPU 频率" + +msgid "CPU Switching Sampling rate" +msgstr "CPU 切换周期" + +msgid "The sampling rate determines how frequently the governor checks to tune the CPU (ms)" +msgstr "CPU 检查切换的周期 (ms)。注意:过于频繁的切换频率会引起网络延迟抖动" + +msgid "CPU Switching Threshold" +msgstr "CPU 切换频率触发阈值" + +msgid "Kernel make a decision on whether it should increase the frequency (%)" +msgstr "当 CPU 占用率超过 (%) 的情况下触发内核切换频率" diff --git a/luci-app-cpufreq/root/etc/config/cpufreq b/luci-app-cpufreq/root/etc/config/cpufreq new file mode 100755 index 000000000..5c2c070e9 --- /dev/null +++ b/luci-app-cpufreq/root/etc/config/cpufreq @@ -0,0 +1,3 @@ + +config settings 'cpufreq' + diff --git a/luci-app-cpufreq/root/etc/init.d/cpufreq b/luci-app-cpufreq/root/etc/init.d/cpufreq new file mode 100755 index 000000000..4dda93bc7 --- /dev/null +++ b/luci-app-cpufreq/root/etc/init.d/cpufreq @@ -0,0 +1,27 @@ +#!/bin/sh /etc/rc.common +START=15 + +NAME="cpufreq" + +config_get_cpufreq() +{ + config_get "$NAME" "$1" +} + +start() +{ + config_load "$NAME" + + for i in $(find /sys/devices/system/cpu/cpufreq/policy* -maxdepth 0 | grep -Eo '[0-9]+') + do + [ -z "$(config_get_cpufreq "governor$i")" ] && return + + config_get_cpufreq "governor$i" > "/sys/devices/system/cpu/cpufreq/policy$i/scaling_governor" + config_get_cpufreq "minfreq$i" > "/sys/devices/system/cpu/cpufreq/policy$i/scaling_min_freq" + config_get_cpufreq "maxfreq$i" > "/sys/devices/system/cpu/cpufreq/policy$i/scaling_max_freq" + if [ "$(config_get_cpufreq "governor$i")" = "ondemand" ]; then + config_get_cpufreq "sdfactor$i" > "/sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor" + config_get_cpufreq "upthreshold$i" > "/sys/devices/system/cpu/cpufreq/ondemand/up_threshold" + fi + done +} diff --git a/luci-app-cpufreq/root/etc/uci-defaults/10-cpufreq b/luci-app-cpufreq/root/etc/uci-defaults/10-cpufreq new file mode 100755 index 000000000..4ad31dd5f --- /dev/null +++ b/luci-app-cpufreq/root/etc/uci-defaults/10-cpufreq @@ -0,0 +1,104 @@ +#!/bin/sh + +uci_write_config() { + uci -q set cpufreq.cpufreq.governor$1="$2" + uci -q set cpufreq.cpufreq.minfreq$1="$3" + uci -q set cpufreq.cpufreq.maxfreq$1="$4" + [ -n "$5" ] && uci -q set cpufreq.cpufreq.sdfactor$1="$5" + [ -n "$6" ] && uci -q set cpufreq.cpufreq.upthreshold$1="$6" + uci -q commit cpufreq +} + +CPU_FREQS="$(cat '/sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies')" +CPU_POLICYS="$(find '/sys/devices/system/cpu/cpufreq/policy'* -maxdepth 0 | grep -Eo '[0-9]+')" +source "/etc/openwrt_release" +case "$DISTRIB_TARGET" in + "bcm27xx/bcm2710") + uci_write_config 0 ondemand 600000 1200000 10 50 + ;; + "bcm27xx/bcm2711") + uci_write_config 0 ondemand 600000 1500000 10 50 + ;; + "ipq40xx/generic") + uci_write_config 0 ondemand 200000 716000 10 50 + ;; + "ipq60xx/generic") + if echo "$CPU_FREQS" | grep -q "1800000"; then + # IPQ6010/18/28 + CPU_MAX_FREQ="1800000" + else + # IPQ6000 + CPU_MAX_FREQ="1200000" + fi + uci_write_config 0 ondemand 864000 $CPU_MAX_FREQ 10 50 + ;; + "ipq806x/generic") + if echo "$CPU_FREQS" | grep -q "1725000"; then + # IPQ8065 + CPU_MAX_FREQ="1725000" + elif echo "$CPU_FREQS" | grep -q "1400000"; then + # IPQ8064 + CPU_MAX_FREQ="1400000" + else + # IPQ8062 + CPU_MAX_FREQ="1000000" + fi + uci_write_config 0 ondemand 600000 $CPU_MAX_FREQ 10 50 + # IPQ8064/5 + echo "$CPU_POLICYS" | grep -q "1" && uci_write_config 1 ondemand 600000 1200000 10 50 + ;; + "ipq807x/generic") + if echo "$CPU_FREQS" | grep -q "2208000"; then + # IPQ8072/4/6/8A + CPU_MAX_FREQ="2208000" + else + # IPQ8071A + CPU_MAX_FREQ="1382400" + fi + uci_write_config 0 ondemand 1017600 $CPU_MAX_FREQ 10 50 + ;; + "mediatek/mt7622") + uci_write_config 0 ondemand 600000 1350000 10 50 + ;; + "meson/meson8b") + uci_write_config 0 schedutil 816000 1536000 + ;; + "rockchip/armv8") + if echo "$CPU_POLICYS" | grep -q "4"; then + # RK3399 + uci_write_config 0 schedutil 600000 1608000 + uci_write_config 4 schedutil 600000 2016000 + else + if echo "$CPU_FREQS" | grep -q "1992000"; then + # RK3568 + CPU_MAX_FREQ="1992000" + elif echo "$CPU_FREQS" | grep -q "1800000"; then + # RK3566 + CPU_MAX_FREQ="1800000" + else + # RK3328 + CPU_MAX_FREQ="1512000" + fi + uci_write_config 0 schedutil 816000 $CPU_MAX_FREQ + fi + ;; + "sunxi/cortexa53") + if echo "$CPU_FREQS" | grep -q "1800000"; then + # H6 + uci_write_config 0 schedutil 816000 1800000 + else + # H5 + uci_write_config 0 ondemand 648000 1200000 10 50 + fi + ;; +esac + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@cpufreq[-1] + add ucitrack cpufreq + set ucitrack.@cpufreq[-1].init=cpufreq + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/luci-app-cpufreq/root/usr/share/rpcd/acl.d/luci-app-cpufreq.json b/luci-app-cpufreq/root/usr/share/rpcd/acl.d/luci-app-cpufreq.json new file mode 100755 index 000000000..fae58ae40 --- /dev/null +++ b/luci-app-cpufreq/root/usr/share/rpcd/acl.d/luci-app-cpufreq.json @@ -0,0 +1,11 @@ +{ + "luci-app-cpufreq": { + "description": "Grant UCI access for luci-app-cpufreq", + "read": { + "uci": [ "cpufreq" ] + }, + "write": { + "uci": [ "cpufreq" ] + } + } +} diff --git a/luci-app-diskman/Makefile b/luci-app-diskman/Makefile new file mode 100755 index 000000000..fa6c46357 --- /dev/null +++ b/luci-app-diskman/Makefile @@ -0,0 +1,51 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-diskman + +PKG_MAINTAINER:=lisaac +PKG_LICENSE:=AGPL-3.0 + +LUCI_TITLE:=Disk Manager interface for LuCI +LUCI_DEPENDS:=+blkid +e2fsprogs +parted +smartmontools \ + +PACKAGE_$(PKG_NAME)_INCLUDE_btrfs_progs:btrfs-progs \ + +PACKAGE_$(PKG_NAME)_INCLUDE_lsblk:lsblk \ + +PACKAGE_$(PKG_NAME)_INCLUDE_mdadm:mdadm \ + +PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_raid456:mdadm \ + +PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_raid456:kmod-md-raid456 \ + +PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_linears:mdadm \ + +PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_linears:kmod-md-linear + +include $(INCLUDE_DIR)/package.mk + +define Package/$(PKG_NAME)/config +config PACKAGE_$(PKG_NAME)_INCLUDE_btrfs_progs + bool "Include btrfs-progs" + default n + +config PACKAGE_$(PKG_NAME)_INCLUDE_lsblk + bool "Include lsblk" + default n + +config PACKAGE_$(PKG_NAME)_INCLUDE_mdadm + bool "Include mdadm" + default n + +config PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_raid456 + depends on PACKAGE_$(PKG_NAME)_INCLUDE_mdadm + bool "Include kmod-md-raid456" + default n + +config PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_linear + depends on PACKAGE_$(PKG_NAME)_INCLUDE_mdadm + bool "Include kmod-md-linear" + default n +endef + +define Package/$(PKG_NAME)/postinst +#!/bin/sh +rm -fr /tmp/luci-indexcache /tmp/luci-modulecache +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-diskman/luasrc/controller/diskman.lua b/luci-app-diskman/luasrc/controller/diskman.lua new file mode 100755 index 000000000..258120430 --- /dev/null +++ b/luci-app-diskman/luasrc/controller/diskman.lua @@ -0,0 +1,155 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +require "luci.util" +module("luci.controller.diskman",package.seeall) + +function index() + -- check all used executables in disk management are existed + local CMD = {"parted", "blkid", "smartctl"} + local executables_all_existed = true + for _, cmd in ipairs(CMD) do + local command = luci.sys.exec("/usr/bin/which " .. cmd) + if not command:match(cmd) then + executables_all_existed = false + break + end + end + + if not executables_all_existed then return end + -- entry(path, target, title, order) + -- set leaf attr to true to pass argument throughe url (e.g. admin/system/disk/partition/sda) + entry({"admin", "system", "diskman"}, alias("admin", "system", "diskman", "disks"), _("Disk Man"), 55) + entry({"admin", "system", "diskman", "disks"}, form("diskman/disks"), nil).leaf = true + entry({"admin", "system", "diskman", "partition"}, form("diskman/partition"), nil).leaf = true + entry({"admin", "system", "diskman", "btrfs"}, form("diskman/btrfs"), nil).leaf = true + entry({"admin", "system", "diskman", "format_partition"}, call("format_partition"), nil).leaf = true + entry({"admin", "system", "diskman", "get_disk_info"}, call("get_disk_info"), nil).leaf = true + entry({"admin", "system", "diskman", "mk_p_table"}, call("mk_p_table"), nil).leaf = true + entry({"admin", "system", "diskman", "smartdetail"}, call("smart_detail"), nil).leaf = true + entry({"admin", "system", "diskman", "smartattr"}, call("smart_attr"), nil).leaf = true +end + +function format_partition() + local partation_name = luci.http.formvalue("partation_name") + local fs = luci.http.formvalue("file_system") + if not partation_name then + luci.http.status(500, "Partition NOT found!") + luci.http.write_json("Partition NOT found!") + return + elseif not nixio.fs.access("/dev/"..partation_name) then + luci.http.status(500, "Partition NOT found!") + luci.http.write_json("Partition NOT found!") + return + elseif not fs then + luci.http.status(500, "no file system") + luci.http.write_json("no file system") + return + end + local dm = require "luci.model.diskman" + code, msg = dm.format_partition(partation_name, fs) + luci.http.status(code, msg) + luci.http.write_json(msg) +end + +function get_disk_info(dev) + if not dev then + luci.http.status(500, "no device") + luci.http.write_json("no device") + return + elseif not nixio.fs.access("/dev/"..dev) then + luci.http.status(500, "no device") + luci.http.write_json("no device") + return + end + local dm = require "luci.model.diskman" + local device_info = dm.get_disk_info(dev) + luci.http.status(200, "ok") + luci.http.prepare_content("application/json") + luci.http.write_json(device_info) +end + +function mk_p_table() + local p_table = luci.http.formvalue("p_table") + local dev = luci.http.formvalue("dev") + if not dev then + luci.http.status(500, "no device") + luci.http.write_json("no device") + return + elseif not nixio.fs.access("/dev/"..dev) then + luci.http.status(500, "no device") + luci.http.write_json("no device") + return + end + local dm = require "luci.model.diskman" + if p_table == "GPT" or p_table == "MBR" then + p_table = p_table == "MBR" and "msdos" or "gpt" + local res = luci.sys.call(dm.command.parted .. " -s /dev/" .. dev .. " mktable ".. p_table) + if res == 0 then + luci.http.status(200, "ok") + else + luci.http.status(500, "command exec error") + end + luci.http.prepare_content("application/json") + luci.http.write_json({code=res}) + else + luci.http.status(404, "not support") + luci.http.prepare_content("application/json") + luci.http.write_json({code="1"}) + end +end + +function smart_detail(dev) + luci.template.render("diskman/smart_detail", {dev=dev}) +end + +function smart_attr(dev) + local dm = require "luci.model.diskman" + local cmd = io.popen(dm.command.smartctl .. " -H -A -i /dev/%s" % dev) + if cmd then + local attr = { } + if cmd:match("NVMe Version:")then + while true do + local ln = cmd:read("*l") + if not ln then + break + elseif ln:match("^(.-):%s+(.+)") then + local key, value = ln:match("^(.-):%s+(.+)") + attr[#attr+1]= { + key = key, + value = value + } + end + end + else + while true do + local ln = cmd:read("*l") + if not ln then + break + elseif ln:match("^.*%d+%s+.+%s+.+%s+.+%s+.+%s+.+%s+.+%s+.+%s+.+%s+.+") then + local id,attrbute,flag,value,worst,thresh,type,updated,raw = ln:match("^%s*(%d+)%s+([%a%p]+)%s+(%w+)%s+(%d+)%s+(%d+)%s+(%d+)%s+([%a%p]+)%s+(%a+)%s+[%w%p]+%s+(.+)") + id= "%x" % id + if not id:match("^%w%w") then + id = "0%s" % id + end + attr[#attr+1]= { + id = id:upper(), + attrbute = attrbute, + flag = flag, + value = value, + worst = worst, + thresh = thresh, + type = type, + updated = updated, + raw = raw + } + end + end + end + cmd:close() + luci.http.prepare_content("application/json") + luci.http.write_json(attr) + end +end diff --git a/luci-app-diskman/luasrc/model/cbi/diskman/btrfs.lua b/luci-app-diskman/luasrc/model/cbi/diskman/btrfs.lua new file mode 100755 index 000000000..006007853 --- /dev/null +++ b/luci-app-diskman/luasrc/model/cbi/diskman/btrfs.lua @@ -0,0 +1,210 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +require "luci.util" +require("luci.tools.webadmin") +local dm = require "luci.model.diskman" +local uuid = arg[1] + +if not uuid then luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) end + +-- mount subv=/ to tempfs +mount_point = "/tmp/.btrfs_tmp" +nixio.fs.mkdirr(mount_point) +luci.util.exec(dm.command.umount .. " "..mount_point .. " >/dev/null 2>&1") +luci.util.exec(dm.command.mount .. " -t btrfs -o subvol=/ UUID="..uuid.." "..mount_point) + +m = SimpleForm("btrfs", translate("Btrfs"), translate("Manage Btrfs")) +m.template = "diskman/cbi/xsimpleform" +m.redirect = luci.dispatcher.build_url("admin/system/diskman") +m.submit = false +m.reset = false + +-- info +local btrfs_info = dm.get_btrfs_info(mount_point) +local table_btrfs_info = m:section(Table, {btrfs_info}, translate("Btrfs Info")) +table_btrfs_info:option(DummyValue, "uuid", translate("UUID")) +table_btrfs_info:option(DummyValue, "members", translate("Members")) +table_btrfs_info:option(DummyValue, "data_raid_level", translate("Data")) +table_btrfs_info:option(DummyValue, "metadata_raid_lavel", translate("Metadata")) +table_btrfs_info:option(DummyValue, "size_formated", translate("Size")) +table_btrfs_info:option(DummyValue, "used_formated", translate("Used")) +table_btrfs_info:option(DummyValue, "free_formated", translate("Free Space")) +table_btrfs_info:option(DummyValue, "usage", translate("Usage")) +local v_btrfs_label = table_btrfs_info:option(Value, "label", translate("Label")) +local value_btrfs_label = "" +v_btrfs_label.write = function(self, section, value) + value_btrfs_label = value or "" +end +local btn_update_label = table_btrfs_info:option(Button, "_update_label") +btn_update_label.inputtitle = translate("Update") +btn_update_label.inputstyle = "edit" +btn_update_label.write = function(self, section, value) + local cmd = dm.command.btrfs .. " filesystem label " .. mount_point .. " " .. value_btrfs_label + local res = luci.util.exec(cmd) + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/btrfs/" .. uuid)) +end +-- subvolume +local subvolume_list = dm.get_btrfs_subv(mount_point) +subvolume_list["_"] = { ID = 0 } +table_subvolume = m:section(Table, subvolume_list, translate("SubVolumes")) +table_subvolume:option(DummyValue, "id", translate("ID")) +table_subvolume:option(DummyValue, "top_level", translate("Top Level")) +table_subvolume:option(DummyValue, "uuid", translate("UUID")) +table_subvolume:option(DummyValue, "otime", translate("Otime")) +table_subvolume:option(DummyValue, "snapshots", translate("Snapshots")) +local v_path = table_subvolume:option(Value, "path", translate("Path")) +v_path.forcewrite = true +v_path.render = function(self, section, scope) + if subvolume_list[section].ID == 0 then + self.template = "cbi/value" + self.placeholder = "/my_subvolume" + self.forcewrite = true + Value.render(self, section, scope) + else + self.template = "cbi/dvalue" + DummyValue.render(self, section, scope) + end +end +local value_path +v_path.write = function(self, section, value) + value_path = value +end +local btn_set_default = table_subvolume:option(Button, "_subv_set_default", translate("Set Default")) +btn_set_default.forcewrite = true +btn_set_default.inputstyle = "edit" +btn_set_default.template = "diskman/cbi/disabled_button" +btn_set_default.render = function(self, section, scope) + if subvolume_list[section].default_subvolume then + self.view_disabled = true + self.inputtitle = translate("Set Default") + elseif subvolume_list[section].ID == 0 then + self.template = "cbi/dvalue" + else + self.inputtitle = translate("Set Default") + self.view_disabled = false + end + Button.render(self, section, scope) +end +btn_set_default.write = function(self, section, value) + local cmd + if value == translate("Set Default") then + cmd = dm.command.btrfs .. " subvolume set-default " .. mount_point..subvolume_list[section].path + else + cmd = dm.command.btrfs .. " subvolume set-default " .. mount_point.."/" + end + local res = luci.util.exec(cmd.. " 2>&1") + if res and (res:match("ERR") or res:match("not enough arguments")) then + m.errmessage = res + else + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/btrfs/" .. uuid)) + end +end +local btn_remove = table_subvolume:option(Button, "_subv_remove") +btn_remove.template = "diskman/cbi/disabled_button" +btn_remove.forcewrite = true +btn_remove.render = function(self, section, scope) + if subvolume_list[section].ID == 0 then + btn_remove.inputtitle = translate("Create") + btn_remove.inputstyle = "add" + self.view_disabled = false + elseif subvolume_list[section].path == "/" or subvolume_list[section].default_subvolume then + btn_remove.inputtitle = translate("Delete") + btn_remove.inputstyle = "remove" + self.view_disabled = true + else + btn_remove.inputtitle = translate("Delete") + btn_remove.inputstyle = "remove" + self.view_disabled = false + end + Button.render(self, section, scope) +end + +btn_remove.write = function(self, section, value) + local cmd + if value == translate("Delete") then + cmd = dm.command.btrfs .. " subvolume delete " .. mount_point .. subvolume_list[section].path + elseif value == translate("Create") then + if value_path and value_path:match("^/") then + cmd = dm.command.btrfs .. " subvolume create " .. mount_point .. value_path + else + m.errmessage = translate("Please input Subvolume Path, Subvolume must start with '/'") + return + end + end + local res = luci.util.exec(cmd.. " 2>&1") + if res and (res:match("ERR") or res:match("not enough arguments")) then + m.errmessage = luci.util.pcdata(res) + else + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/btrfs/" .. uuid)) + end +end +-- snapshot +-- local snapshot_list = dm.get_btrfs_subv(mount_point, 1) +-- table_snapshot = m:section(Table, snapshot_list, translate("Snapshots")) +-- table_snapshot:option(DummyValue, "id", translate("ID")) +-- table_snapshot:option(DummyValue, "top_level", translate("Top Level")) +-- table_snapshot:option(DummyValue, "uuid", translate("UUID")) +-- table_snapshot:option(DummyValue, "otime", translate("Otime")) +-- table_snapshot:option(DummyValue, "path", translate("Path")) +-- local snp_remove = table_snapshot:option(Button, "_snp_remove") +-- snp_remove.inputtitle = translate("Delete") +-- snp_remove.inputstyle = "remove" +-- snp_remove.write = function(self, section, value) +-- local cmd = dm.command.btrfs .. " subvolume delete " .. mount_point .. snapshot_list[section].path +-- local res = luci.util.exec(cmd.. " 2>&1") +-- if res and (res:match("ERR") or res:match("not enough arguments")) then +-- m.errmessage = luci.util.pcdata(res) +-- else +-- luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/btrfs/" .. uuid)) +-- end +-- end + +-- new snapshots +local s_snapshot = m:section(SimpleSection, translate("New Snapshot")) +local value_sorce, value_dest, value_readonly +local v_sorce = s_snapshot:option(Value, "_source", translate("Source Path"), translate("The source path for create the snapshot")) +v_sorce.placeholder = "/data" +v_sorce.forcewrite = true +v_sorce.write = function(self, section, value) + value_sorce = value +end + +local v_readonly = s_snapshot:option(Flag, "_readonly", translate("Readonly"), translate("The path where you want to store the snapshot")) +v_readonly.forcewrite = true +v_readonly.rmempty = false +v_readonly.disabled = 0 +v_readonly.enabled = 1 +v_readonly.default = 1 +v_readonly.write = function(self, section, value) + value_readonly = value +end +local v_dest = s_snapshot:option(Value, "_dest", translate("Destination Path (optional)")) +v_dest.forcewrite = true +v_dest.placeholder = "/.snapshot/202002051538" +v_dest.write = function(self, section, value) + value_dest = value +end +local btn_snp_create = s_snapshot:option(Button, "_snp_create") +btn_snp_create.title = " " +btn_snp_create.inputtitle = translate("New Snapshot") +btn_snp_create.inputstyle = "add" +btn_snp_create.write = function(self, section, value) + if value_sorce and value_sorce:match("^/") then + if not value_dest then value_dest = "/.snapshot"..value_sorce.."/"..os.date("%Y%m%d%H%M%S") end + nixio.fs.mkdirr(mount_point..value_dest:match("(.-)[^/]+$")) + local cmd = dm.command.btrfs .. " subvolume snapshot" .. (value_readonly == 1 and " -r " or " ") .. mount_point..value_sorce .. " " .. mount_point..value_dest + local res = luci.util.exec(cmd .. " 2>&1") + if res and (res:match("ERR") or res:match("not enough arguments")) then + m.errmessage = luci.util.pcdata(res) + else + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/btrfs/" .. uuid)) + end + else + m.errmessage = translate("Please input Source Path of snapshot, Source Path must start with '/'") + end +end + +return m diff --git a/luci-app-diskman/luasrc/model/cbi/diskman/disks.lua b/luci-app-diskman/luasrc/model/cbi/diskman/disks.lua new file mode 100755 index 000000000..c209df0aa --- /dev/null +++ b/luci-app-diskman/luasrc/model/cbi/diskman/disks.lua @@ -0,0 +1,327 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +require "luci.util" +require("luci.tools.webadmin") +local dm = require "luci.model.diskman" + +-- Use (non-UCI) SimpleForm since we have no related config file +m = SimpleForm("diskman", translate("DiskMan"), translate("Manage Disks over LuCI.")) +m.template = "diskman/cbi/xsimpleform" +m:append(Template("diskman/disk_info")) +-- disable submit and reset button +m.submit = false +m.reset = false +-- rescan disks +rescan = m:section(SimpleSection) +rescan_button = rescan:option(Button, "_rescan") +rescan_button.inputtitle= translate("Rescan Disks") +rescan_button.template = "diskman/cbi/inlinebutton" +rescan_button.inputstyle = "add" +rescan_button.forcewrite = true +rescan_button.write = function(self, section, value) + luci.util.exec("echo '- - -' | tee /sys/class/scsi_host/host*/scan > /dev/null") + if dm.command.mdadm then + luci.util.exec(dm.command.mdadm .. " --assemble --scan") + end + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) +end + +-- disks +local disks = dm.list_devices() +d = m:section(Table, disks, translate("Disks")) +d.config = "disk" +-- option(type, id(key of table), text) +d:option(DummyValue, "path", translate("Path")) +d:option(DummyValue, "model", translate("Model")) +d:option(DummyValue, "sn", translate("Serial Number")) +d:option(DummyValue, "size_formated", translate("Size")) +d:option(DummyValue, "temp", translate("Temp")) +-- d:option(DummyValue, "sec_size", translate("Sector Size ")) +d:option(DummyValue, "p_table", translate("Partition Table")) +d:option(DummyValue, "sata_ver", translate("SATA Version")) +-- d:option(DummyValue, "rota_rate", translate("Rotation Rate")) +d:option(DummyValue, "health", translate("Health")) +d:option(DummyValue, "status", translate("Status")) + +d.extedit = luci.dispatcher.build_url("admin/system/diskman/partition/%s") + +-- raid devices +if dm.command.mdadm then + local raid_devices = dm.list_raid_devices() + -- raid_devices = diskmanager.getRAIDdevices() + if next(raid_devices) ~= nil then + local r = m:section(Table, raid_devices, translate("RAID Devices")) + r.config = "_raid" + r:option(DummyValue, "path", translate("Path")) + r:option(DummyValue, "level", translate("RAID mode")) + r:option(DummyValue, "size_formated", translate("Size")) + r:option(DummyValue, "p_table", translate("Partition Table")) + r:option(DummyValue, "status", translate("Status")) + r:option(DummyValue, "members_str", translate("Members")) + r:option(DummyValue, "active", translate("Active")) + r.extedit = luci.dispatcher.build_url("admin/system/diskman/partition/%s") + end +end + +-- btrfs devices +if dm.command.btrfs then + btrfs_devices = dm.list_btrfs_devices() + if next(btrfs_devices) ~= nil then + local table_btrfs = m:section(Table, btrfs_devices, translate("Btrfs")) + table_btrfs:option(DummyValue, "uuid", translate("UUID")) + table_btrfs:option(DummyValue, "label", translate("Label")) + table_btrfs:option(DummyValue, "members", translate("Members")) + -- sieze is error, since there is RAID + -- table_btrfs:option(DummyValue, "size_formated", translate("Size")) + table_btrfs:option(DummyValue, "used_formated", translate("Usage")) + table_btrfs.extedit = luci.dispatcher.build_url("admin/system/diskman/btrfs/%s") + end +end + +-- mount point +local mount_point = dm.get_mount_points() +local _mount_point = {} +table.insert( mount_point, { device = 0 } ) +local table_mp = m:section(Table, mount_point, translate("Mount Point")) +local v_device = table_mp:option(Value, "device", translate("Device")) +v_device.render = function(self, section, scope) + if mount_point[section].device == 0 then + self.template = "cbi/value" + self.forcewrite = true + for dev, info in pairs(disks) do + for i, v in ipairs(info.partitions) do + self:value("/dev/".. v.name, "/dev/".. v.name .. " ".. v.size_formated) + end + end + Value.render(self, section, scope) + else + self.template = "cbi/dvalue" + DummyValue.render(self, section, scope) + end +end +v_device.write = function(self, section, value) + _mount_point.device = value and value:gsub("%s+", "") or "" +end +local v_fs = table_mp:option(Value, "fs", translate("File System")) +v_fs.render = function(self, section, scope) + if mount_point[section].device == 0 then + self.template = "cbi/value" + self:value("auto", "auto") + self.default = "auto" + self.forcewrite = true + Value.render(self, section, scope) + else + self.template = "cbi/dvalue" + DummyValue.render(self, section, scope) + end +end +v_fs.write = function(self, section, value) + _mount_point.fs = value and value:gsub("%s+", "") or "" +end +local v_mount_option = table_mp:option(Value, "mount_options", translate("Mount Options")) +v_mount_option.render = function(self, section, scope) + if mount_point[section].device == 0 then + self.template = "cbi/value" + self.placeholder = "rw,noauto" + self.forcewrite = true + Value.render(self, section, scope) + else + self.template = "cbi/dvalue" + local mp = mount_point[section].mount_options + mount_point[section].mount_options = nil + local length = 0 + for k in mp:gmatch("([^,]+)") do + mount_point[section].mount_options = mount_point[section].mount_options and (mount_point[section].mount_options .. ",") or "" + if length > 20 then + mount_point[section].mount_options = mount_point[section].mount_options.. "
" + length = 0 + end + mount_point[section].mount_options = mount_point[section].mount_options .. k + length = length + #k + end + self.rawhtml = true + -- mount_point[section].mount_options = #mount_point[section].mount_options > 50 and mount_point[section].mount_options:sub(1,50) .. "..." or mount_point[section].mount_options + DummyValue.render(self, section, scope) + end +end +v_mount_option.write = function(self, section, value) + _mount_point.mount_options = value and value:gsub("%s+", "") or "" +end +local v_mount_point = table_mp:option(Value, "mount_point", translate("Mount Point")) +v_mount_point.render = function(self, section, scope) + if mount_point[section].device == 0 then + self.template = "cbi/value" + self.placeholder = "/media/diskX" + self.forcewrite = true + Value.render(self, section, scope) + else + self.template = "cbi/dvalue" + local new_mp = "" + local v_mp_d + for v_mp_d in self["section"]["data"][section]["mount_point"]:gmatch('[^/]+') do + if #v_mp_d > 12 then + new_mp = new_mp .. "/" .. v_mp_d:sub(1,7) .. ".." .. v_mp_d:sub(-4) + else + new_mp = new_mp .."/".. v_mp_d + end + end + self["section"]["data"][section]["mount_point"] = ''..new_mp..'' + self.rawhtml = true + DummyValue.render(self, section, scope) + end +end +v_mount_point.write = function(self, section, value) + _mount_point.mount_point = value +end +local btn_umount = table_mp:option(Button, "_mount", translate("Mount")) +btn_umount.forcewrite = true +btn_umount.render = function(self, section, scope) + if mount_point[section].device == 0 then + self.inputtitle = translate("Mount") + btn_umount.inputstyle = "add" + else + self.inputtitle = translate("Umount") + btn_umount.inputstyle = "remove" + end + Button.render(self, section, scope) +end +btn_umount.write = function(self, section, value) + local res + if value == translate("Mount") then + if not _mount_point.mount_point or not _mount_point.device then return end + luci.util.exec("mkdir -p ".. _mount_point.mount_point) + res = luci.util.exec(dm.command.mount .. " ".. _mount_point.device .. (_mount_point.fs and (" -t ".. _mount_point.fs )or "") .. (_mount_point.mount_options and (" -o " .. _mount_point.mount_options.. " ") or " ").._mount_point.mount_point .. " 2>&1") + elseif value == translate("Umount") then + res = luci.util.exec(dm.command.umount .. " "..mount_point[section].mount_point .. " 2>&1") + end + if res:match("^mount:") or res:match("^umount:") then + m.errmessage = luci.util.pcdata(res) + else + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) + end +end + +if dm.command.mdadm or dm.command.btrfs then +local creation_section = m:section(TypedSection, "_creation") +creation_section.cfgsections=function() + return {translate("Creation")} +end +creation_section:tab("raid", translate("RAID"), translate("RAID Creation")) +creation_section:tab("btrfs", translate("Btrfs"), translate("Multiple Devices Btrfs Creation")) + +-- raid functions +if dm.command.mdadm then + + local rname, rmembers, rlevel + local r_name = creation_section:taboption("raid", Value, "_rname", translate("Raid Name")) + r_name.placeholder = "/dev/md0" + r_name.write = function(self, section, value) + rname = value + end + local r_level = creation_section:taboption("raid", ListValue, "_rlevel", translate("Raid Level")) + local valid_raid = luci.util.exec("lsmod | grep md_mod") + if valid_raid:match("linear") then + r_level:value("linear", "Linear") + end + if valid_raid:match("raid456") then + r_level:value("5", "Raid 5") + r_level:value("6", "Raid 6") + end + if valid_raid:match("raid1") then + r_level:value("1", "Raid 1") + end + if valid_raid:match("raid0") then + r_level:value("0", "Raid 0") + end + if valid_raid:match("raid10") then + r_level:value("10", "Raid 10") + end + r_level.write = function(self, section, value) + rlevel = value + end + local r_member = creation_section:taboption("raid", DynamicList, "_rmember", translate("Raid Member")) + for dev, info in pairs(disks) do + if not info.inuse and #info.partitions == 0 then + r_member:value(info.path, info.path.. " ".. info.size_formated) + end + for i, v in ipairs(info.partitions) do + if not v.inuse then + r_member:value("/dev/".. v.name, "/dev/".. v.name .. " ".. v.size_formated) + end + end + end + r_member.write = function(self, section, value) + rmembers = value + end + local r_create = creation_section:taboption("raid", Button, "_rcreate") + r_create.render = function(self, section, scope) + self.title = " " + self.inputtitle = translate("Create Raid") + self.inputstyle = "add" + Button.render(self, section, scope) + end + r_create.write = function(self, section, value) + -- mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/sdb6 /dev/sdc5 + local res = dm.create_raid(rname, rlevel, rmembers) + if res and res:match("^ERR") then + m.errmessage = luci.util.pcdata(res) + return + end + dm.gen_mdadm_config() + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) + end +end + +-- btrfs +if dm.command.btrfs then + local blabel, bmembers, blevel + local btrfs_label = creation_section:taboption("btrfs", Value, "_blabel", translate("Btrfs Label")) + btrfs_label.write = function(self, section, value) + blabel = value + end + local btrfs_level = creation_section:taboption("btrfs", ListValue, "_blevel", translate("Btrfs Raid Level")) + btrfs_level:value("single", "Single") + btrfs_level:value("raid0", "Raid 0") + btrfs_level:value("raid1", "Raid 1") + btrfs_level:value("raid10", "Raid 10") + btrfs_level.write = function(self, section, value) + blevel = value + end + + local btrfs_member = creation_section:taboption("btrfs", DynamicList, "_bmember", translate("Btrfs Member")) + for dev, info in pairs(disks) do + if not info.inuse and #info.partitions == 0 then + btrfs_member:value(info.path, info.path.. " ".. info.size_formated) + end + for i, v in ipairs(info.partitions) do + if not v.inuse then + btrfs_member:value("/dev/".. v.name, "/dev/".. v.name .. " ".. v.size_formated) + end + end + end + btrfs_member.write = function(self, section, value) + bmembers = value + end + local btrfs_create = creation_section:taboption("btrfs", Button, "_bcreate") + btrfs_create.render = function(self, section, scope) + self.title = " " + self.inputtitle = translate("Create Btrfs") + self.inputstyle = "add" + Button.render(self, section, scope) + end + btrfs_create.write = function(self, section, value) + -- mkfs.btrfs -L label -d blevel /dev/sda /dev/sdb + local res = dm.create_btrfs(blabel, blevel, bmembers) + if res and res:match("^ERR") then + m.errmessage = luci.util.pcdata(res) + return + end + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) + end +end +end + +return m diff --git a/luci-app-diskman/luasrc/model/cbi/diskman/partition.lua b/luci-app-diskman/luasrc/model/cbi/diskman/partition.lua new file mode 100755 index 000000000..1428eb6b2 --- /dev/null +++ b/luci-app-diskman/luasrc/model/cbi/diskman/partition.lua @@ -0,0 +1,366 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +require "luci.util" +require("luci.tools.webadmin") +local dm = require "luci.model.diskman" +local dev = arg[1] + +if not dev then + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) +elseif not nixio.fs.access("/dev/"..dev) then + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) +end + +m = SimpleForm("partition", translate("Partition Management"), translate("Partition Disk over LuCI.")) +m.template = "diskman/cbi/xsimpleform" +m.redirect = luci.dispatcher.build_url("admin/system/diskman") +m:append(Template("diskman/partition_info")) +-- disable submit and reset button +m.submit = false +m.reset = false + +local disk_info = dm.get_disk_info(dev, true) +local format_cmd = dm.get_format_cmd() + +s = m:section(Table, {disk_info}, translate("Device Info")) +-- s:option(DummyValue, "key") +-- s:option(DummyValue, "value") +s:option(DummyValue, "path", translate("Path")) +s:option(DummyValue, "model", translate("Model")) +s:option(DummyValue, "sn", translate("Serial Number")) +s:option(DummyValue, "size_formated", translate("Size")) +s:option(DummyValue, "sec_size", translate("Sector Size")) +local dv_p_table = s:option(ListValue, "p_table", translate("Partition Table")) +dv_p_table.render = function(self, section, scope) + -- create table only if not used by raid and no partitions on disk + if not disk_info.p_table:match("Raid") and (#disk_info.partitions == 0 or (#disk_info.partitions == 1 and disk_info.partitions[1].number == -1) or (disk_info.p_table:match("LOOP") and not disk_info.partitions[1].inuse)) then + self:value(disk_info.p_table, disk_info.p_table) + self:value("GPT", "GPT") + self:value("MBR", "MBR") + self.default = disk_info.p_table + ListValue.render(self, section, scope) + else + self.template = "cbi/dvalue" + DummyValue.render(self, section, scope) + end +end +if disk_info.type:match("md") then + s:option(DummyValue, "level", translate("Level")) + s:option(DummyValue, "members_str", translate("Members")) +else + s:option(DummyValue, "temp", translate("Temp")) + s:option(DummyValue, "sata_ver", translate("SATA Version")) + s:option(DummyValue, "rota_rate", translate("Rotation Rate")) +end +s:option(DummyValue, "status", translate("Status")) +local btn_health = s:option(Button, "health", translate("Health")) +btn_health.render = function(self, section, scope) + if disk_info.health then + self.inputtitle = disk_info.health + if disk_info.health == "PASSED" then + self.inputstyle = "add" + else + self.inputstyle = "remove" + end + Button.render(self, section, scope) + else + self.template = "cbi/dvalue" + DummyValue.render(self, section, scope) + end +end + +local btn_eject = s:option(Button, "_eject") +btn_eject.template = "diskman/cbi/disabled_button" +btn_eject.inputstyle = "remove" +btn_eject.render = function(self, section, scope) + for i, p in ipairs(disk_info.partitions) do + if p.mount_point ~= "-" then + self.view_disabled = true + break + end + end + if disk_info.p_table:match("Raid") then + self.view_disabled = true + end + if disk_info.type:match("md") then + btn_eject.inputtitle = translate("Remove") + else + btn_eject.inputtitle = translate("Eject") + end + Button.render(self, section, scope) +end +btn_eject.forcewrite = true +btn_eject.write = function(self, section, value) + for i, p in ipairs(disk_info.partitions) do + if p.mount_point ~= "-" then + m.errmessage = p.name .. translate("is in use! please unmount it first!") + return + end + end + if disk_info.type:match("md") then + luci.util.exec(dm.command.mdadm .. " --stop /dev/" .. dev) + luci.util.exec(dm.command.mdadm .. " --remove /dev/" .. dev) + for _, disk in ipairs(disk_info.members) do + luci.util.exec(dm.command.mdadm .. " --zero-superblock " .. disk) + end + dm.gen_mdadm_config() + else + luci.util.exec("echo 1 > /sys/block/" .. dev .. "/device/delete") + end + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) +end +-- eject: echo 1 > /sys/block/(device)/device/delete +-- rescan: echo '- - -' | tee /sys/class/scsi_host/host*/scan > /dev/null + + +-- partitions info +if not disk_info.p_table:match("Raid") then + s_partition_table = m:section(Table, disk_info.partitions, translate("Partitions Info"), translate("Default 2048 sector alignment, support +size{b,k,m,g,t} in End Sector")) + + -- s_partition_table:option(DummyValue, "number", translate("Number")) + s_partition_table:option(DummyValue, "name", translate("Name")) + local val_sec_start = s_partition_table:option(Value, "sec_start", translate("Start Sector")) + val_sec_start.render = function(self, section, scope) + -- could create new partition + if disk_info.partitions[section].number == -1 and disk_info.partitions[section].size > 1 * 1024 * 1024 then + self.template = "cbi/value" + Value.render(self, section, scope) + else + self.template = "cbi/dvalue" + DummyValue.render(self, section, scope) + end + end + local val_sec_end = s_partition_table:option(Value, "sec_end", translate("End Sector")) + val_sec_end.render = function(self, section, scope) + -- could create new partition + if disk_info.partitions[section].number == -1 and disk_info.partitions[section].size > 1 * 1024 * 1024 then + self.template = "cbi/value" + Value.render(self, section, scope) + else + self.template = "cbi/dvalue" + DummyValue.render(self, section, scope) + end + end + val_sec_start.forcewrite = true + val_sec_start.write = function(self, section, value) + disk_info.partitions[section]._sec_start = value + end + val_sec_end.forcewrite = true + val_sec_end.write = function(self, section, value) + disk_info.partitions[section]._sec_end = value + end + s_partition_table:option(DummyValue, "size_formated", translate("Size")) + if disk_info.p_table == "MBR" then + s_partition_table:option(DummyValue, "type", translate("Type")) + end + s_partition_table:option(DummyValue, "used_formated", translate("Used")) + s_partition_table:option(DummyValue, "free_formated", translate("Free Space")) + s_partition_table:option(DummyValue, "usage", translate("Usage")) + local dv_mount_point = s_partition_table:option(DummyValue, "mount_point", translate("Mount Point")) + dv_mount_point.rawhtml = true + dv_mount_point.render = function(self, section, scope) + local new_mp = "" + local v_mp_d + for line in self["section"]["data"][section]["mount_point"]:gmatch("[^%s]+") do + if line == '-' then + new_mp = line + break + end + for v_mp_d in line:gmatch('[^/]+') do + if #v_mp_d > 12 then + new_mp = new_mp .. "/" .. v_mp_d:sub(1,7) .. ".." .. v_mp_d:sub(-4) + else + new_mp = new_mp .."/".. v_mp_d + end + end + new_mp = '' ..new_mp ..'' .. "
" + end + self["section"]["data"][section]["mount_point"] = new_mp + DummyValue.render(self, section, scope) + end + local val_fs = s_partition_table:option(Value, "fs", translate("File System")) + val_fs.forcewrite = true + val_fs.partitions = disk_info.partitions + for k, v in pairs(format_cmd) do + val_fs.format_cmd = val_fs.format_cmd and (val_fs.format_cmd .. "," .. k) or k + end + + val_fs.write = function(self, section, value) + disk_info.partitions[section]._fs = value + end + val_fs.render = function(self, section, scope) + -- use listvalue when partition not mounted + if disk_info.partitions[section].mount_point == "-" and disk_info.partitions[section].number ~= -1 and disk_info.partitions[section].type ~= "extended" then + self.template = "diskman/cbi/format_button" + self.inputstyle = "reset" + self.inputtitle = disk_info.partitions[section].fs == "raw" and translate("Format") or disk_info.partitions[section].fs + Button.render(self, section, scope) + -- self:reset_values() + -- self.keylist = {} + -- self.vallist = {} + -- for k, v in pairs(format_cmd) do + -- self:value(k,k) + -- end + -- self.default = disk_info.partitions[section].fs + else + -- self:reset_values() + -- self.keylist = {} + -- self.vallist = {} + self.template = "cbi/dvalue" + DummyValue.render(self, section, scope) + end + end + -- btn_format = s_partition_table:option(Button, "_format") + -- btn_format.template = "diskman/cbi/format_button" + -- btn_format.partitions = disk_info.partitions + -- btn_format.render = function(self, section, scope) + -- if disk_info.partitions[section].mount_point == "-" and disk_info.partitions[section].number ~= -1 and disk_info.partitions[section].type ~= "extended" then + -- self.inputtitle = translate("Format") + -- self.template = "diskman/cbi/disabled_button" + -- self.view_disabled = false + -- self.inputstyle = "reset" + -- for k, v in pairs(format_cmd) do + -- self:depends("val_fs", "k") + -- end + -- -- elseif disk_info.partitions[section].mount_point ~= "-" and disk_info.partitions[section].number ~= -1 then + -- -- self.inputtitle = "Format" + -- -- self.template = "diskman/cbi/disabled_button" + -- -- self.view_disabled = true + -- -- self.inputstyle = "reset" + -- else + -- self.inputtitle = "" + -- self.template = "cbi/dvalue" + -- end + -- Button.render(self, section, scope) + -- end + -- btn_format.forcewrite = true + -- btn_format.write = function(self, section, value) + -- local partition_name = "/dev/".. disk_info.partitions[section].name + -- if not nixio.fs.access(partition_name) then + -- m.errmessage = translate("Partition NOT found!") + -- return + -- end + -- local fs = disk_info.partitions[section]._fs + -- if not format_cmd[fs] then + -- m.errmessage = translate("Filesystem NOT support!") + -- return + -- end + -- local cmd = format_cmd[fs].cmd .. " " .. format_cmd[fs].option .. " " .. partition_name + -- local res = luci.util.exec(cmd .. " 2>&1") + -- if res and res:lower():match("error+") then + -- m.errmessage = luci.util.pcdata(res) + -- else + -- luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/partition/" .. dev)) + -- end + -- end + + local btn_action = s_partition_table:option(Button, "_action") + btn_action.forcewrite = true + btn_action.template = "diskman/cbi/disabled_button" + btn_action.render = function(self, section, scope) + -- if partition is mounted or the size < 1mb, then disable the add action + if disk_info.partitions[section].mount_point ~= "-" or (disk_info.partitions[section].type ~= "extended" and disk_info.partitions[section].number == -1 and disk_info.partitions[section].size <= 1 * 1024 * 1024) then + self.view_disabled = true + -- self.inputtitle = "" + -- self.template = "cbi/dvalue" + elseif disk_info.partitions[section].type == "extended" and next(disk_info.partitions[section]["logicals"]) ~= nil then + self.view_disabled = true + else + -- self.template = "diskman/cbi/disabled_button" + self.view_disabled = false + end + if disk_info.partitions[section].number ~= -1 then + self.inputtitle = translate("Remove") + self.inputstyle = "remove" + else + self.inputtitle = translate("New") + self.inputstyle = "add" + end + Button.render(self, section, scope) + end + btn_action.write = function(self, section, value) + if value == translate("New") then + local start_sec = disk_info.partitions[section]._sec_start and tonumber(disk_info.partitions[section]._sec_start) or tonumber(disk_info.partitions[section].sec_start) + local end_sec = disk_info.partitions[section]._sec_end + + if start_sec then + -- for sector alignment + local align = tonumber(disk_info.phy_sec) / tonumber(disk_info.logic_sec) + align = (align < 2048) and 2048 + if start_sec < 2048 then + start_sec = "2048" .. "s" + elseif math.fmod( start_sec, align ) ~= 0 then + start_sec = tostring(start_sec + align - math.fmod( start_sec, align )) .. "s" + else + start_sec = start_sec .. "s" + end + else + m.errmessage = translate("Invalid Start Sector!") + return + end + -- support +size format for End sector + local end_size, end_unit = end_sec:match("^+(%d-)([bkmgtsBKMGTS])$") + if tonumber(end_size) and end_unit then + local unit ={ + B=1, + S=512, + K=1024, + M=1048576, + G=1073741824, + T=1099511627776 + } + end_unit = end_unit:upper() + end_sec = tostring(tonumber(end_size) * unit[end_unit] / unit["S"] + tonumber(start_sec:sub(1,-2)) - 1 ) .. "s" + elseif tonumber(end_sec) then + end_sec = end_sec .. "s" + else + m.errmessage = translate("Invalid End Sector!") + return + end + local part_type = "primary" + + if disk_info.p_table == "MBR" and disk_info["extended_partition_index"] then + if tonumber(disk_info.partitions[disk_info["extended_partition_index"]].sec_start) <= tonumber(start_sec:sub(1,-2)) and tonumber(disk_info.partitions[disk_info["extended_partition_index"]].sec_end) >= tonumber(end_sec:sub(1,-2)) then + part_type = "logical" + if tonumber(start_sec:sub(1,-2)) - tonumber(disk_info.partitions[section].sec_start) < 2048 then + start_sec = tonumber(start_sec:sub(1,-2)) + 2048 + start_sec = start_sec .."s" + end + end + elseif disk_info.p_table == "GPT" then + -- AUTOMATIC FIX GPT PARTITION TABLE + -- Not all of the space available to /dev/sdb appears to be used, you can fix the GPT to use all of the space (an extra 16123870 blocks) or continue with the current setting? + local cmd = ' printf "ok\nfix\n" | parted ---pretend-input-tty /dev/'.. dev ..' print' + luci.util.exec(cmd .. " 2>&1") + end + + -- partiton + local cmd = dm.command.parted .. " -s -a optimal /dev/" .. dev .. " mkpart " .. part_type .." " .. start_sec .. " " .. end_sec + local res = luci.util.exec(cmd .. " 2>&1") + if res and res:lower():match("error+") then + m.errmessage = luci.util.pcdata(res) + else + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/partition/" .. dev)) + end + elseif value == translate("Remove") then + -- remove partition + local number = tostring(disk_info.partitions[section].number) + if (not number) or (number == "") then + m.errmessage = translate("Partition not exists!") + return + end + local cmd = dm.command.parted .. " -s /dev/" .. dev .. " rm " .. number + local res = luci.util.exec(cmd .. " 2>&1") + if res and res:lower():match("error+") then + m.errmessage = luci.util.pcdata(res) + else + luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/partition/" .. dev)) + end + end + end +end + +return m diff --git a/luci-app-diskman/luasrc/model/diskman.lua b/luci-app-diskman/luasrc/model/diskman.lua new file mode 100755 index 000000000..b29308c31 --- /dev/null +++ b/luci-app-diskman/luasrc/model/diskman.lua @@ -0,0 +1,738 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +require "luci.util" +local ver = require "luci.version" + +local CMD = {"parted", "mdadm", "blkid", "smartctl", "df", "btrfs", "lsblk"} + +local d = {command ={}} +for _, cmd in ipairs(CMD) do + local command = luci.sys.exec("/usr/bin/which " .. cmd) + d.command[cmd] = command:match("^.+"..cmd) or nil +end + +d.command.mount = nixio.fs.access("/usr/bin/mount") and "/usr/bin/mount" or "/bin/mount" +d.command.umount = nixio.fs.access("/usr/bin/umount") and "/usr/bin/umount" or "/bin/umount" + +local proc_mounts = nixio.fs.readfile("/proc/mounts") or "" +local mounts = luci.util.exec(d.command.mount .. " 2>/dev/null") or "" +local swaps = nixio.fs.readfile("/proc/swaps") or "" +local df = luci.sys.exec(d.command.df .. " 2>/dev/null") or "" + +function byte_format(byte) + local suff = {"B", "KB", "MB", "GB", "TB"} + for i=1, 5 do + if byte > 1024 and i < 5 then + byte = byte / 1024 + else + return string.format("%.2f %s", byte, suff[i]) + end + end +end + +local get_smart_info = function(device) + local section + local smart_info = {} + for _, line in ipairs(luci.util.execl(d.command.smartctl .. " -H -A -i -n standby -f brief /dev/" .. device)) do + local attrib, val + if section == 1 then + attrib, val = line:match "^(.-):%s+(.+)" + elseif section == 2 and smart_info.nvme_ver then + attrib, val = line:match("^(.-):%s+(.+)") + if not smart_info.health then smart_info.health = line:match(".-overall%-health.-: (.+)") end + elseif section == 2 then + attrib, val = line:match("^([0-9 ]+)%s+[^ ]+%s+[POSRCK-]+%s+[0-9-]+%s+[0-9-]+%s+[0-9-]+%s+[0-9-]+%s+([0-9-]+)") + if not smart_info.health then smart_info.health = line:match(".-overall%-health.-: (.+)") end + else + attrib = line:match "^=== START OF (.*) SECTION ===" + if attrib and attrib:match("INFORMATION") then + section = 1 + elseif attrib and attrib:match("SMART DATA") then + section = 2 + elseif not smart_info.status then + val = line:match "^Device is in (.*) mode" + if val then smart_info.status = val end + end + end + + if not attrib then + if section ~= 2 then section = 0 end + elseif (attrib == "Power mode is") or + (attrib == "Power mode was") then + smart_info.status = val:match("(%S+)") + -- elseif attrib == "Sector Sizes" then + -- -- 512 bytes logical, 4096 bytes physical + -- smart_info.phy_sec = val:match "([0-9]*) bytes physical" + -- smart_info.logic_sec = val:match "([0-9]*) bytes logical" + -- elseif attrib == "Sector Size" then + -- -- 512 bytes logical/physical + -- smart_info.phy_sec = val:match "([0-9]*)" + -- smart_info.logic_sec = smart_info.phy_sec + elseif attrib == "Serial Number" then + smart_info.sn = val + elseif attrib == "194" or attrib == "Temperature" then + smart_info.temp = val:match("(%d+)") .. "°C" + elseif attrib == "Rotation Rate" then + smart_info.rota_rate = val + elseif attrib == "SATA Version is" then + smart_info.sata_ver = val + elseif attrib == "NVMe Version" then + smart_info.nvme_ver = val + end + end + return smart_info +end + +local parse_parted_info = function(keys, line) + -- parse the output of parted command (machine parseable format) + -- /dev/sda:5860533168s:scsi:512:4096:gpt:ATA ST3000DM001-1ER1:; + -- 1:34s:2047s:2014s:free; + -- 1:2048s:1073743872s:1073741825s:ext4:primary:; + local result = {} + local values = {} + + for value in line:gmatch("(.-)[:;]") do table.insert(values, value) end + for i = 1,#keys do + result[keys[i]] = values[i] or "" + end + return result +end + +local is_raid_member = function(partition) + -- check if inuse as raid member + if nixio.fs.access("/proc/mdstat") then + for _, result in ipairs(luci.util.execl("grep md /proc/mdstat | sed 's/[][]//g'")) do + local md, buf + md, buf = result:match("(md.-):(.+)") + if buf:match(partition) then + return "Raid Member: ".. md + end + end + end + return nil +end + +local get_mount_point = function(partition) + local mount_point + for m in mounts:gmatch("/dev/"..partition.." on ([^ ]*)") do + mount_point = (mount_point and (mount_point .. " ") or "") .. m + end + if mount_point then return mount_point end + -- result = luci.sys.exec('cat /proc/mounts | awk \'{if($1=="/dev/'.. partition ..'") print $2}\'') + -- if result ~= "" then return result end + + if swaps:match("\n/dev/" .. partition .."%s") then return "swap" end + -- result = luci.sys.exec("cat /proc/swaps | grep /dev/" .. partition) + -- if result ~= "" then return "swap" end + + return is_raid_member(partition) + +end + +-- return used, free, usage +local get_partition_usage = function(partition) + if not nixio.fs.access("/dev/"..partition) then return false end + local used, free, usage = df:match("\n/dev/" .. partition .. "%s+%d+%s+(%d+)%s+(%d+)%s+(%d+)%%%s-") + + usage = usage and (usage .. "%") or "-" + used = used and (tonumber(used) * 1024) or 0 + free = free and (tonumber(free) * 1024) or 0 + + return used, free, usage +end + +local get_parted_info = function(device) + if not device then return end + local result = {partitions={}} + local DEVICE_INFO_KEYS = { "path", "size", "type", "logic_sec", "phy_sec", "p_table", "model", "flags" } + local PARTITION_INFO_KEYS = { "number", "sec_start", "sec_end", "size", "fs", "tag_name", "flags" } + local partition_temp + local partitions_temp = {} + local disk_temp + + for line in luci.util.execi(d.command.parted .. " -s -m /dev/" .. device .. " unit s print free", "r") do + if line:find("^/dev/"..device..":.+") then + disk_temp = parse_parted_info(DEVICE_INFO_KEYS, line) + disk_temp.partitions = {} + if disk_temp["size"] then + local length = disk_temp["size"]:gsub("^(%d+)s$", "%1") + local newsize = tostring(tonumber(length)*tonumber(disk_temp["logic_sec"])) + disk_temp["size"] = newsize + end + if disk_temp["p_table"] == "msdos" then + disk_temp["p_table"] = "MBR" + else + disk_temp["p_table"] = disk_temp["p_table"]:upper() + end + elseif line:find("^%d-:.+") then + partition_temp = parse_parted_info(PARTITION_INFO_KEYS, line) + -- use human-readable form instead of sector number + if partition_temp["size"] then + local length = partition_temp["size"]:gsub("^(%d+)s$", "%1") + local newsize = (tonumber(length) * tonumber(disk_temp["logic_sec"])) + partition_temp["size"] = newsize + partition_temp["size_formated"] = byte_format(newsize) + end + partition_temp["number"] = tonumber(partition_temp["number"]) or -1 + if partition_temp["fs"] == "free" then + partition_temp["number"] = -1 + partition_temp["fs"] = "Free Space" + partition_temp["name"] = "-" + elseif device:match("sd") or device:match("sata") then + partition_temp["name"] = device..partition_temp["number"] + elseif device:match("mmcblk") or device:match("md") or device:match("nvme") then + partition_temp["name"] = device.."p"..partition_temp["number"] + end + if partition_temp["number"] > 0 and partition_temp["fs"] == "" and d.command.lsblk then + partition_temp["fs"] = luci.util.exec(d.command.lsblk .. " /dev/"..device.. tostring(partition_temp["number"]) .. " -no fstype"):match("([^%s]+)") or "" + end + partition_temp["fs"] = partition_temp["fs"] == "" and "raw" or partition_temp["fs"] + partition_temp["sec_start"] = partition_temp["sec_start"] and partition_temp["sec_start"]:sub(1,-2) + partition_temp["sec_end"] = partition_temp["sec_end"] and partition_temp["sec_end"]:sub(1,-2) + partition_temp["mount_point"] = partition_temp["name"]~="-" and get_mount_point(partition_temp["name"]) or "-" + if partition_temp["mount_point"]~="-" then + partition_temp["used"], partition_temp["free"], partition_temp["usage"] = get_partition_usage(partition_temp["name"]) + partition_temp["used_formated"] = partition_temp["used"] and byte_format(partition_temp["used"]) or "-" + partition_temp["free_formated"] = partition_temp["free"] and byte_format(partition_temp["free"]) or "-" + else + partition_temp["used"], partition_temp["free"], partition_temp["usage"] = 0,0,"-" + partition_temp["used_formated"] = "-" + partition_temp["free_formated"] = "-" + end + -- if disk_temp["p_table"] == "MBR" and (partition_temp["number"] < 4) and (partition_temp["number"] > 0) then + -- local real_size_sec = tonumber(nixio.fs.readfile("/sys/block/"..device.."/"..partition_temp["name"].."/size")) * tonumber(disk_temp.phy_sec) + -- if real_size_sec ~= partition_temp["size"] then + -- disk_temp["extended_partition_index"] = partition_temp["number"] + -- partition_temp["type"] = "extended" + -- partition_temp["size"] = real_size_sec + -- partition_temp["fs"] = "-" + -- partition_temp["logicals"] = {} + -- else + -- partition_temp["type"] = "primary" + -- end + -- end + + table.insert(partitions_temp, partition_temp) + end + end + if disk_temp and disk_temp["p_table"] == "MBR" then + for i, p in ipairs(partitions_temp) do + if disk_temp["extended_partition_index"] and p["number"] > 4 then + if tonumber(p["sec_end"]) <= tonumber(partitions_temp[disk_temp["extended_partition_index"]]["sec_end"]) and tonumber(p["sec_start"]) >= tonumber(partitions_temp[disk_temp["extended_partition_index"]]["sec_start"]) then + p["type"] = "logical" + table.insert(partitions_temp[disk_temp["extended_partition_index"]]["logicals"], i) + end + elseif (p["number"] < 4) and (p["number"] > 0) then + local s = nixio.fs.readfile("/sys/block/"..device.."/"..p["name"].."/size") + if s then + local real_size_sec = tonumber(s) * tonumber(disk_temp.phy_sec) + -- if size not equal, it's an extended + if real_size_sec ~= p["size"] then + disk_temp["extended_partition_index"] = i + p["type"] = "extended" + p["size"] = real_size_sec + p["fs"] = "-" + p["logicals"] = {} + else + p["type"] = "primary" + end + else + -- if not found in "/sys/block" + p["type"] = "primary" + end + end + end + end + result = disk_temp + result.partitions = partitions_temp + + return result +end + +local mddetail = function(mdpath) + local detail = {} + local path = mdpath:match("^/dev/md%d+$") + if path then + local mdadm = io.popen(d.command.mdadm .. " --detail "..path, "r") + for line in mdadm:lines() do + local key, value = line:match("^%s*(.+) : (.+)") + if key then + detail[key] = value + end + end + mdadm:close() + end + return detail +end + +-- return {{device="", mount_points="", fs="", mount_options="", dump="", pass=""}..} +d.get_mount_points = function() + local mount + local res = {} + local h ={"device", "mount_point", "fs", "mount_options", "dump", "pass"} + for mount in proc_mounts:gmatch("[^\n]+") do + local device = mount:match("^([^%s]+)%s+.+") + -- only show /dev/xxx device + if device and device:match("/dev/") then + res[#res+1] = {} + local i = 0 + for v in mount:gmatch("[^%s]+") do + i = i + 1 + res[#res][h[i]] = v + end + end + end + return res +end + +d.get_disk_info = function(device, wakeup) + --[[ return: + { + path, model, sn, size, size_mounted, flags, type, temp, p_table, logic_sec, phy_sec, sec_size, sata_ver, rota_rate, status, health, + partitions = { + 1 = { number, name, sec_start, sec_end, size, size_mounted, fs, tag_name, type, flags, mount_point, usage, used, free, used_formated, free_formated}, + 2 = { number, name, sec_start, sec_end, size, size_mounted, fs, tag_name, type, flags, mount_point, usage, used, free, used_formated, free_formated}, + ... + } + --raid devices only + level, members, members_str + } + --]] + if not device then return end + local disk_info + local smart_info = get_smart_info(device) + + -- check if divice is the member of raid + smart_info["p_table"] = is_raid_member(device..'0') + -- if status is not active(standby), only check smart_info. + -- if only weakup == true, weakup the disk and check parted_info. + if smart_info.status ~= "STANDBY" or wakeup or (smart_info["p_table"] and not smart_info["p_table"]:match("Raid")) or device:match("^md") then + disk_info = get_parted_info(device) + disk_info["sec_size"] = disk_info["logic_sec"] .. "/" .. disk_info["phy_sec"] + disk_info["size_formated"] = byte_format(tonumber(disk_info["size"])) + -- if status is standby, after get part info, the disk is weakuped, then get smart_info again for more informations + if smart_info.status ~= "ACTIVE" then smart_info = get_smart_info(device) end + else + disk_info = {} + end + + for k, v in pairs(smart_info) do + disk_info[k] = v + end + + if disk_info.type and disk_info.type:match("md") then + local raid_info = d.list_raid_devices()[disk_info["path"]:match("/dev/(.+)")] + for k, v in pairs(raid_info) do + disk_info[k] = v + end + end + return disk_info +end + +d.list_raid_devices = function() + local fs = require "nixio.fs" + + local raid_devices = {} + if not fs.access("/proc/mdstat") then return raid_devices end + local mdstat = io.open("/proc/mdstat", "r") + for line in mdstat:lines() do + + -- md1 : active raid1 sdb2[1] sda2[0] + -- md127 : active raid5 sdh1[6] sdg1[4] sdf1[3] sde1[2] sdd1[1] sdc1[0] + local device_info = {} + local mdpath, list = line:match("^(md%d+) : (.+)") + if mdpath then + local members = {} + for member in string.gmatch(list, "%S+") do + member_path = member:match("^(%S+)%[%d+%]") + if member_path then + member = '/dev/'..member_path + end + table.insert(members, member) + end + local active = table.remove(members, 1) + local level = "-" + if active == "active" then + level = table.remove(members, 1) + end + + local size = tonumber(fs.readfile(string.format("/sys/class/block/%s/size", mdpath))) + local ss = tonumber(fs.readfile(string.format("/sys/class/block/%s/queue/logical_block_size", mdpath))) + + device_info["path"] = "/dev/"..mdpath + device_info["size"] = size*ss + device_info["size_formated"] = byte_format(size*ss) + device_info["active"] = active:upper() + device_info["level"] = level + device_info["members"] = members + device_info["members_str"] = table.concat(members, ", ") + + -- Get more info from output of mdadm --detail + local detail = mddetail(device_info["path"]) + device_info["status"] = detail["State"]:upper() + + raid_devices[mdpath] = device_info + end + end + mdstat:close() + + return raid_devices +end + +-- Collect Devices information + --[[ return: + { + sda={ + path, model, inuse, size_formated, + partitions={ + { name, inuse, size_formated } + ... + } + } + .. + } + --]] +d.list_devices = function() + local fs = require "nixio.fs" + + -- get all device names (sdX and mmcblkX) + local target_devnames = {} + for dev in fs.dir("/dev") do + if dev:match("^sd[a-z]$") + or dev:match("^mmcblk%d+$") + or dev:match("^sata[a-z]$") + or dev:match("^nvme%d+n%d+$") + then + table.insert(target_devnames, dev) + end + end + + local devices = {} + for i, bname in pairs(target_devnames) do + local device_info = {} + local device = "/dev/" .. bname + local size = tonumber(fs.readfile(string.format("/sys/class/block/%s/size", bname)) or "0") + local ss = tonumber(fs.readfile(string.format("/sys/class/block/%s/queue/logical_block_size", bname)) or "0") + local model = fs.readfile(string.format("/sys/class/block/%s/device/model", bname)) + local partitions = {} + for part in nixio.fs.glob("/sys/block/" .. bname .."/" .. bname .. "*") do + local pname = nixio.fs.basename(part) + local psize = byte_format(tonumber(nixio.fs.readfile(part .. "/size"))*ss) + local mount_point = get_mount_point(pname) + if mount_point then device_info["inuse"] = true end + table.insert(partitions, {name = pname, size_formated = psize, inuse = mount_point}) + end + + device_info["path"] = device + device_info["size_formated"] = byte_format(size*ss) + device_info["model"] = model + device_info["partitions"] = partitions + -- true or false + device_info["inuse"] = device_info["inuse"] or get_mount_point(bname) + + local udevinfo = {} + if luci.sys.exec("which udevadm") ~= "" then + local udevadm = io.popen("udevadm info --query=property --name="..device) + for attr in udevadm:lines() do + local k, v = attr:match("(%S+)=(%S+)") + udevinfo[k] = v + end + udevadm:close() + + device_info["info"] = udevinfo + if udevinfo["ID_MODEL"] then device_info["model"] = udevinfo["ID_MODEL"] end + end + devices[bname] = device_info + end + -- luci.util.perror(luci.util.serialize_json(devices)) + return devices +end + +-- get formart cmd +d.get_format_cmd = function() + local AVAILABLE_FMTS = { + ext2 = { cmd = "mkfs.ext2", option = "-F -E lazy_itable_init=1" }, + ext3 = { cmd = "mkfs.ext3", option = "-F -E lazy_itable_init=1" }, + ext4 = { cmd = "mkfs.ext4", option = "-F -E lazy_itable_init=1" }, + fat32 = { cmd = "mkfs.vfat", option = "-F" }, + exfat = { cmd = "mkexfat", option = "-f" }, + hfsplus = { cmd = "mkhfs", option = "-f" }, + ntfs = { cmd = "mkntfs", option = "-f" }, + swap = { cmd = "mkswap", option = "" }, + btrfs = { cmd = "mkfs.btrfs", option = "-f" } + } + result = {} + for fmt, obj in pairs(AVAILABLE_FMTS) do + local cmd = luci.sys.exec("/usr/bin/which " .. obj["cmd"]) + if cmd:match(obj["cmd"]) then + result[fmt] = { cmd = cmd:match("^.+"..obj["cmd"]) ,option = obj["option"] } + end + end + return result +end + +d.create_raid = function(rname, rlevel, rmembers) + local mb = {} + for _, v in ipairs(rmembers) do + mb[v]=v + end + rmembers = {} + for _, v in pairs(mb) do + table.insert(rmembers, v) + end + if type(rname) == "string" then + if rname:match("^md%d-%s+") then + rname = "/dev/"..rname:match("^(md%d-)%s+") + elseif rname:match("^/dev/md%d-%s+") then + rname = "/dev/"..rname:match("^(/dev/md%d-)%s+") + elseif not rname:match("/") then + rname = "/dev/md/".. rname + else + return "ERR: Invalid raid name" + end + else + local mdnum = 0 + for num=1,127 do + local md = io.open("/dev/md"..tostring(num), "r") + if md == nil then + mdnum = num + break + else + io.close(md) + end + end + if mdnum == 0 then return "ERR: Cannot find proper md number" end + rname = "/dev/md"..mdnum + end + + if rlevel == "5" or rlevel == "6" then + if #rmembers < 3 then return "ERR: Not enough members" end + end + if rlevel == "10" then + if #rmembers < 4 then return "ERR: Not enough members" end + end + if #rmembers < 2 then return "ERR: Not enough members" end + local cmd = d.command.mdadm .. " --create "..rname.." --run --assume-clean --homehost=any --level=" .. rlevel .. " --raid-devices=" .. #rmembers .. " " .. table.concat(rmembers, " ") + local res = luci.util.exec(cmd) + return res +end + +d.gen_mdadm_config = function() + if not nixio.fs.access("/etc/config/mdadm") then return end + local uci = require "luci.model.uci" + local x = uci.cursor() + -- delete all array sections + x:foreach("mdadm", "array", function(s) x:delete("mdadm",s[".name"]) end) + local cmd = d.command.mdadm .. " -D -s" + --ARRAY /dev/md1 metadata=1.2 name=any:1 UUID=f998ae14:37621b27:5c49e850:051f6813 + --ARRAY /dev/md3 metadata=1.2 name=any:3 UUID=c068c141:4b4232ca:f48cbf96:67d42feb + for _, v in ipairs(luci.util.execl(cmd)) do + local device, uuid = v:match("^ARRAY%s-([^%s]+)%s-[^%s]-%s-[^%s]-%s-UUID=([^%s]+)%s-") + if device and uuid then + local section_name = x:add("mdadm", "array") + x:set("mdadm", section_name, "device", device) + x:set("mdadm", section_name, "uuid", uuid) + end + end + x:commit("mdadm") + -- enable mdadm + luci.util.exec("/etc/init.d/mdadm enable") +end + +-- list btrfs filesystem device +-- {uuid={uuid, label, members, size, used}...} +d.list_btrfs_devices = function() + local btrfs_device = {} + if not d.command.btrfs then return btrfs_device end + local line, _uuid + for _, line in ipairs(luci.util.execl(d.command.btrfs .. " filesystem show -d --raw")) + do + local label, uuid = line:match("^Label:%s+([^%s]+)%s+uuid:%s+([^%s]+)") + if label and uuid then + _uuid = uuid + local _label = label:match("^'([^']+)'") + btrfs_device[_uuid] = {label = _label or label, uuid = uuid} + -- table.insert(btrfs_device, {label = label, uuid = uuid}) + end + local used = line:match("Total devices[%w%s]+used%s+(%d+)$") + if used then + btrfs_device[_uuid]["used"] = tonumber(used) + btrfs_device[_uuid]["used_formated"] = byte_format(tonumber(used)) + end + local size, device = line:match("devid[%w.%s]+size%s+(%d+)[%w.%s]+path%s+([^%s]+)$") + if size and device then + btrfs_device[_uuid]["size"] = btrfs_device[_uuid]["size"] and btrfs_device[_uuid]["size"] + tonumber(size) or tonumber(size) + btrfs_device[_uuid]["size_formated"] = byte_format(btrfs_device[_uuid]["size"]) + btrfs_device[_uuid]["members"] = btrfs_device[_uuid]["members"] and btrfs_device[_uuid]["members"]..", "..device or device + end + end + return btrfs_device +end + +d.create_btrfs = function(blabel, blevel, bmembers) + -- mkfs.btrfs -L label -d blevel /dev/sda /dev/sdb + if not d.command.btrfs or type(bmembers) ~= "table" or next(bmembers) == nil then return "ERR no btrfs support or no members" end + local label = blabel and " -L " .. blabel or "" + local cmd = "mkfs.btrfs -f " .. label .. " -d " .. blevel .. " " .. table.concat(bmembers, " ") + return luci.util.exec(cmd) +end + +-- get btrfs info +-- {uuid, label, members, data_raid_level,metadata_raid_lavel, size, used, size_formated, used_formated, free, free_formated, usage} +d.get_btrfs_info = function(m_point) + local btrfs_info = {} + if not m_point or not d.command.btrfs then return btrfs_info end + local cmd = d.command.btrfs .. " filesystem show --raw " .. m_point + local _, line, uuid, _label, members + for _, line in ipairs(luci.util.execl(cmd)) do + if not uuid and not _label then + _label, uuid = line:match("^Label:%s+([^%s]+)%s+uuid:%s+([^s]+)") + else + local mb = line:match("%s+devid.+path%s+([^%s]+)") + if mb then + members = members and (members .. ", ".. mb) or mb + end + end + end + + if not _label or not uuid then return btrfs_info end + local label = _label:match("^'([^']+)'") + cmd = d.command.btrfs .. " filesystem usage -b " .. m_point + local used, free, data_raid_level, metadata_raid_lavel + for _, line in ipairs(luci.util.execl(cmd)) do + if not used then + used = line:match("^%s+Used:%s+(%d+)") + elseif not free then + free = line:match("^%s+Free %(estimated%):%s+(%d+)") + elseif not data_raid_level then + data_raid_level = line:match("^Data,%s-(%w+)") + elseif not metadata_raid_lavel then + metadata_raid_lavel = line:match("^Metadata,%s-(%w+)") + end + end + if used and free and data_raid_level and metadata_raid_lavel then + used = tonumber(used) + free = tonumber(free) + btrfs_info = { + uuid = uuid, + label = label, + data_raid_level = data_raid_level, + metadata_raid_lavel = metadata_raid_lavel, + used = used, + free = free, + size = used + free, + size_formated = byte_format(used + free), + used_formated = byte_format(used), + free_formated = byte_format(free), + members = members, + usage = string.format("%.2f",(used / (free+used) * 100)) .. "%" + } + end + return btrfs_info +end + +-- get btrfs subvolume +-- {id={id, gen, top_level, path, snapshots, otime, default_subvolume}...} +d.get_btrfs_subv = function(m_point, snapshot) +local subvolume = {} +if not m_point or not d.command.btrfs then return subvolume end + +-- get default subvolume +local cmd = d.command.btrfs .. " subvolume get-default " .. m_point +local res = luci.util.exec(cmd) +local default_subvolume_id = res:match("^ID%s+([^%s]+)") + +-- get the root subvolume +if not snapshot then + local _, line, section_snap, _uuid, _otime, _id, _snap + cmd = d.command.btrfs .. " subvolume show ".. m_point + for _, line in ipairs(luci.util.execl(cmd)) do + if not section_snap then + if not _uuid then + _uuid = line:match("^%s-UUID:%s+([^%s]+)") + elseif not _otime then + _otime = line:match("^%s+Creation time:%s+(.+)") + elseif not _id then + _id = line:match("^%s+Subvolume ID:%s+([^%s]+)") + elseif line:match("^%s+(Snapshot%(s%):)") then + section_snap = true + end + else + local snapshot = line:match("^%s+(.+)") + if snapshot then + _snap = _snap and (_snap ..", /".. snapshot) or ("/"..snapshot) + end + end + end + if _uuid and _otime and _id then + subvolume["0".._id] = {id = _id , uuid = _uuid, otime = _otime, snapshots = _snap, path = "/"} + if default_subvolume_id == _id then + subvolume["0".._id].default_subvolume = 1 + end + end +end + +-- get subvolume of btrfs +cmd = d.command.btrfs .. " subvolume list -gcu" .. (snapshot and "s " or " ") .. m_point +for _, line in ipairs(luci.util.execl(cmd)) do + -- ID 259 gen 11 top level 258 uuid 26ae0c59-199a-cc4d-bd58-644eb4f65d33 path 1a/2b' + local id, gen, top_level, uuid, path, otime, otime2 + if snapshot then + id, gen, top_level, otime, otime2, uuid, path = line:match("^ID%s+([^%s]+)%s+gen%s+([^%s]+)%s+cgen.-top level%s+([^%s]+)%s+otime%s+([^%s]+)%s+([^%s]+)%s+uuid%s+([^%s]+)%s+path%s+([^%s]+)%s-$") + else + id, gen, top_level, uuid, path = line:match("^ID%s+([^%s]+)%s+gen%s+([^%s]+)%s+cgen.-top level%s+([^%s]+)%s+uuid%s+([^%s]+)%s+path%s+([^%s]+)%s-$") + end + if id and gen and top_level and uuid and path then + subvolume[id] = {id = id, gen = gen, top_level = top_level, otime = (otime and otime or "") .." ".. (otime2 and otime2 or ""), uuid = uuid, path = '/'.. path} + if not snapshot then + -- use btrfs subv show to get snapshots + local show_cmd = d.command.btrfs .. " subvolume show "..m_point.."/"..path + local __, line_show, section_snap + for __, line_show in ipairs(luci.util.execl(show_cmd)) do + if not section_snap then + local create_time = line_show:match("^%s+Creation time:%s+(.+)") + if create_time then + subvolume[id]["otime"] = create_time + elseif line_show:match("^%s+(Snapshot%(s%):)") then + section_snap = "true" + end + else + local snapshot = line_show:match("^%s+(.+)") + subvolume[id]["snapshots"] = subvolume[id]["snapshots"] and (subvolume[id]["snapshots"] .. ", /".. snapshot) or ("/"..snapshot) + end + end + end + end +end +if subvolume[default_subvolume_id] then + subvolume[default_subvolume_id].default_subvolume = 1 +end +-- if m_point == "/tmp/.btrfs_tmp" then +-- luci.util.exec("umount " .. m_point) +-- end +return subvolume +end + +d.format_partition = function(partition, fs) + local partition_name = "/dev/".. partition + if not nixio.fs.access(partition_name) then + return 500, "Partition NOT found!" + end + + local format_cmd = d.get_format_cmd() + if not format_cmd[fs] then + return 500, "Filesystem NOT support!" + end + local cmd = format_cmd[fs].cmd .. " " .. format_cmd[fs].option .. " " .. partition_name + local res = luci.util.exec(cmd .. " 2>&1") + if res and res:lower():match("error+") then + return 500, res + else + return 200, "OK" + end +end + +return d diff --git a/luci-app-diskman/luasrc/view/diskman/cbi/disabled_button.htm b/luci-app-diskman/luasrc/view/diskman/cbi/disabled_button.htm new file mode 100755 index 000000000..1ad4eca3b --- /dev/null +++ b/luci-app-diskman/luasrc/view/diskman/cbi/disabled_button.htm @@ -0,0 +1,7 @@ +<%+cbi/valueheader%> + <% if self:cfgvalue(section) ~= false then %> + " type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> <% if self.view_disabled then %> disabled <% end %>/> + <% else %> + - + <% end %> +<%+cbi/valuefooter%> \ No newline at end of file diff --git a/luci-app-diskman/luasrc/view/diskman/cbi/format_button.htm b/luci-app-diskman/luasrc/view/diskman/cbi/format_button.htm new file mode 100755 index 000000000..18e306e27 --- /dev/null +++ b/luci-app-diskman/luasrc/view/diskman/cbi/format_button.htm @@ -0,0 +1,7 @@ +<%+cbi/valueheader%> + <% if self:cfgvalue(section) ~= false then %> + " onclick="event.preventDefault();partition_format('<%=self.partitions[section].name%>', '<%=self.format_cmd%>', '<%=self.inputtitle%>');" type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> <% if self.view_disabled then %> disabled <% end %>/> + <% else %> + - + <% end %> +<%+cbi/valuefooter%> diff --git a/luci-app-diskman/luasrc/view/diskman/cbi/inlinebutton.htm b/luci-app-diskman/luasrc/view/diskman/cbi/inlinebutton.htm new file mode 100755 index 000000000..b1b193257 --- /dev/null +++ b/luci-app-diskman/luasrc/view/diskman/cbi/inlinebutton.htm @@ -0,0 +1,7 @@ +
+ <% if self:cfgvalue(section) ~= false then %> + " type="submit"" <% if self.disable then %>disabled <% end %><%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> /> + <% else %> + - + <% end %> +
diff --git a/luci-app-diskman/luasrc/view/diskman/cbi/xnullsection.htm b/luci-app-diskman/luasrc/view/diskman/cbi/xnullsection.htm new file mode 100755 index 000000000..69aa65e00 --- /dev/null +++ b/luci-app-diskman/luasrc/view/diskman/cbi/xnullsection.htm @@ -0,0 +1,37 @@ +
+ <% if self.title and #self.title > 0 then -%> + <%=self.title%> + <%- end %> + <% if self.description and #self.description > 0 then -%> +
<%=self.description%>
+ <%- end %> +
+
+ <% self:render_children(1, scope or {}) %> +
+ <% if self.error and self.error[1] then -%> +
+
    <% for _, e in ipairs(self.error[1]) do -%> +
  • + <%- if e == "invalid" then -%> + <%:One or more fields contain invalid values!%> + <%- elseif e == "missing" then -%> + <%:One or more required fields have no value!%> + <%- else -%> + <%=pcdata(e)%> + <%- end -%> +
  • + <%- end %>
+
+ <%- end %> +
+
+<%- + if type(self.hidden) == "table" then + for k, v in pairs(self.hidden) do +-%> + +<%- + end + end +%> \ No newline at end of file diff --git a/luci-app-diskman/luasrc/view/diskman/cbi/xsimpleform.htm b/luci-app-diskman/luasrc/view/diskman/cbi/xsimpleform.htm new file mode 100755 index 000000000..a831bfc77 --- /dev/null +++ b/luci-app-diskman/luasrc/view/diskman/cbi/xsimpleform.htm @@ -0,0 +1,88 @@ +<% if not self.embedded then %> +
> + + + <% + end + + %>
<% + + if self.title and #self.title > 0 then + %>

<%=self.title%>

<% + end + + if self.description and #self.description > 0 then + %>
<%=self.description%>
<% + end + + self:render_children() + + %>
<% + + if self.message then + %>
<%=self.message%>
<% + end + + if self.errmessage then + %>
<%=self.errmessage%>
<% + end + + if not self.embedded then + if type(self.hidden) == "table" then + local k, v + for k, v in pairs(self.hidden) do + %><% + end + end + + local display_back = (self.redirect) + local display_cancel = (self.cancel ~= false and self.on_cancel) + local display_skip = (self.flow and self.flow.skip) + local display_submit = (self.submit ~= false) + local display_reset = (self.reset ~= false) + + if display_back or display_cancel or display_skip or display_submit or display_reset then + %>
<% + + if display_back then + %> <% + end + + if display_cancel then + local label = pcdata(self.cancel or translate("Cancel")) + %> <% + end + + if display_skip then + %> <% + end + + if display_submit then + local label = pcdata(self.submit or translate("Submit")) + %> <% + end + + if display_reset then + local label = pcdata(self.reset or translate("Reset")) + %> <% + end + + %>
<% + end + + %>
<% + end +%> + + diff --git a/luci-app-diskman/luasrc/view/diskman/disk_info.htm b/luci-app-diskman/luasrc/view/diskman/disk_info.htm new file mode 100755 index 000000000..118acd50d --- /dev/null +++ b/luci-app-diskman/luasrc/view/diskman/disk_info.htm @@ -0,0 +1,108 @@ + diff --git a/luci-app-diskman/luasrc/view/diskman/partition_info.htm b/luci-app-diskman/luasrc/view/diskman/partition_info.htm new file mode 100755 index 000000000..78f5c1bd7 --- /dev/null +++ b/luci-app-diskman/luasrc/view/diskman/partition_info.htm @@ -0,0 +1,129 @@ + + \ No newline at end of file diff --git a/luci-app-diskman/luasrc/view/diskman/smart_detail.htm b/luci-app-diskman/luasrc/view/diskman/smart_detail.htm new file mode 100755 index 000000000..56a9139f0 --- /dev/null +++ b/luci-app-diskman/luasrc/view/diskman/smart_detail.htm @@ -0,0 +1,79 @@ + + + S.M.A.R.T detail of <%=dev%> + + + + +
+
+ <%:S.M.A.R.T Attrbutes%>: /dev/<%=dev%> + + + <% if dev:match("nvme") then %> + + <% else %> + + + + + + + + + + <% end %> + + + + +
<%:ID%><%:Attrbute%><%:Flag%><%:Value%><%:Worst%><%:Thresh%><%:Type%><%:Updated%><%:Raw%>

<%:Collecting data...%>
+
+
+ + \ No newline at end of file diff --git a/luci-app-diskman/po/zh-cn/diskman.po b/luci-app-diskman/po/zh-cn/diskman.po new file mode 100755 index 000000000..f380fc586 --- /dev/null +++ b/luci-app-diskman/po/zh-cn/diskman.po @@ -0,0 +1,239 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8\n" + +msgid "DiskMan" +msgstr "DiskMan 磁盘管理" + +msgid "Manage Disks over LuCI." +msgstr "通过 LuCI 管理磁盘" + +msgid "Rescan Disks" +msgstr "重新扫描磁盘" + +msgid "Disks" +msgstr "磁盘" + +msgid "Path" +msgstr "路径" + +msgid "Serial Number" +msgstr "序列号" + +msgid "Temp" +msgstr "温度" + +msgid "Partition Table" +msgstr "分区表" + +msgid "SATA Version" +msgstr "SATA 版本" + +msgid "Health" +msgstr "健康" + +msgid "File System" +msgstr "文件系统" + +msgid "Mount Options" +msgstr "挂载选项" + +msgid "Mount" +msgstr "挂载" + +msgid "Umount" +msgstr "卸载" + +msgid "Eject" +msgstr "弹出" + +msgid "New" +msgstr "创建" + +msgid "Remove" +msgstr "移除" + +msgid "Format" +msgstr "格式化" + +msgid "Start Sector" +msgstr "起始扇区" + +msgid "End Sector" +msgstr "中止扇区" + +msgid "Usage" +msgstr "用量" + +msgid "Used" +msgstr "已使用" + +msgid "Free Space" +msgstr "空闲空间" + +msgid "Model" +msgstr "型号" + +msgid "Size" +msgstr "容量" + +msgid "Status" +msgstr "状态" + +msgid "Mount Point" +msgstr "挂载点" + +msgid "Sector Size" +msgstr "扇区/物理扇区大小" + +msgid "Rotation Rate" +msgstr "转速" + +msgid "RAID Devices" +msgstr "RAID 设备" + +msgid "RAID mode" +msgstr "RAID 模式" + +msgid "Members" +msgstr "成员" + +msgid "Active" +msgstr "活动" + +msgid "RAID Creation" +msgstr "RAID 创建" + +msgid "Raid Name" +msgstr "RAID 名称" + +msgid "Raid Level" +msgstr "RAID 级别" + +msgid "Raid Member" +msgstr "磁盘阵列成员" + +msgid "Create Raid" +msgstr "创建 RAID" + +msgid "Partition Management" +msgstr "分区管理" + +msgid "Partition Disk over LuCI." +msgstr "通过LuCI分区磁盘。" + +msgid "Device Info" +msgstr "设备信息" + +msgid "Disk Man" +msgstr "磁盘管理" + +msgid "Partitions Info" +msgstr "分区信息" + +msgid "Default 2048 sector alignment, support +size{b,k,m,g,t} in End Sector" +msgstr "默认2048扇区对齐,【中止扇区】支持 +容量{b,k,m,g,t} 格式,例:+500m +10g +1t" + +msgid "Multiple Devices Btrfs Creation" +msgstr "Btrfs 阵列创建" + +msgid "Label" +msgstr "卷标" + +msgid "Btrfs Label" +msgstr "Btrfs 卷标" + +msgid "Btrfs Raid Level" +msgstr "Btrfs Raid 级别" + +msgid "Btrfs Member" +msgstr "Btrfs 整列成员" + +msgid "Create Btrfs" +msgstr "创建 Btrfs" + +msgid "New Snapshot" +msgstr "新建快照" + +msgid "SubVolumes" +msgstr "子卷" + +msgid "Top Level" +msgstr "父ID" + +msgid "Manage Btrfs" +msgstr "Btrfs 管理" + +msgid "Otime" +msgstr "创建时间" + +msgid "Snapshots" +msgstr "快照" + +msgid "Set Default" +msgstr "默认子卷" + +msgid "Source Path" +msgstr "源目录" + +msgid "Readonly" +msgstr "只读" + +msgid "Delete" +msgstr "删除" + +msgid "Create" +msgstr "创建" + +msgid "Destination Path (optional)" +msgstr "目标目录(可选)" + +msgid "Metadata" +msgstr "元数据" + +msgid "Data" +msgstr "数据" + +msgid "Btrfs Info" +msgstr "Btrfs 信息" + +msgid "The source path for create the snapshot" +msgstr "创建快照的源数据目录" + +msgid "The path where you want to store the snapshot" +msgstr "存放快照数据目录" + +msgid "Please input Source Path of snapshot, Source Path must start with '/'" +msgstr "请输入快照源路径,源路径必须以'/'开头" + +msgid "Please input Subvolume Path, Subvolume must start with '/'" +msgstr "请输入子卷路径,子卷路径必须以'/'开头" + +msgid "is in use! please unmount it first!" +msgstr "正在被使用!请先卸载!" + +msgid "Partition NOT found!" +msgstr "分区未找到!" + +msgid "Filesystem NOT support!" +msgstr "文件系统不支持!" + +msgid "Invalid Start Sector!" +msgstr "无效的起始扇区!" + +msgid "Invalid End Sector" +msgstr "无效的终止扇区!" + +msgid "Partition not exists!" +msgstr "分区不存在!" + +msgid "Creation" +msgstr "创建" + +msgid "Please select file system!" +msgstr "请选择文件系统!" + +msgid "Format partation:" +msgstr "格式化分区:" + +msgid "Warnning !! \nTHIS WILL OVERWRITE EXISTING PARTITIONS!! \nModify the partition table?" +msgstr "警告!!\n此操作会覆盖现有分区\n确定修改分区表?" diff --git a/luci-app-diskman/po/zh_Hans b/luci-app-diskman/po/zh_Hans new file mode 100755 index 000000000..41451e4a1 --- /dev/null +++ b/luci-app-diskman/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-dockerman/Makefile b/luci-app-dockerman/Makefile new file mode 100755 index 000000000..51dfa5c09 --- /dev/null +++ b/luci-app-dockerman/Makefile @@ -0,0 +1,21 @@ +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for docker +LUCI_DEPENDS:=@(aarch64||arm||x86_64) \ + +luci-compat \ + +luci-lib-docker \ + +luci-lib-ip \ + +docker \ + +dockerd \ + +ttyd +LUCI_PKGARCH:=all + +PKG_LICENSE:=AGPL-3.0 +PKG_MAINTAINER:=lisaac \ + Florian Eckert + +PKG_VERSION:=v0.5.25 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-dockerman/depends.lst b/luci-app-dockerman/depends.lst new file mode 100755 index 000000000..8a62f6a74 --- /dev/null +++ b/luci-app-dockerman/depends.lst @@ -0,0 +1 @@ +ttyd docker-cli \ No newline at end of file diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/containers.svg b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/containers.svg new file mode 100755 index 000000000..4165f90bd --- /dev/null +++ b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/containers.svg @@ -0,0 +1,7 @@ + + + + + Docker icon + + diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-icon.png b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..f156dc1c7ce823b64401a62e249a377a52b20518 GIT binary patch literal 1098 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD~={fiXV7C&U%V9R;)t0gq*U=0MX+ zN`m}?85o(ESyC4w|-+%u4`_J-}sTczTlbWZCV@SoVw>LwB4?74P_~>1@e8=wH z&fU=qckC8l&g%8~Z~JzK84Nd5-}BA*yTAO~_e*zul#cA)^xP@%bNkV}@@1=Sm_nnE zsJyDOVK&^ans!Nao=4-k^E=Evcdue#I_C3e(OiQAVx|XrN*fszgEv38bVX+ZBLk<7 zgTLLX>}*a2RcCnDxd+V)Vr>uTRp^EDZ{YS5zRLWD zX+K+oZ^7&}j0wVDUNLYaA7pxy&DgP{)_cNgRs|`Y0}Vb07X9Dsw#Gcb+lVpm)>U4M z$qW{)40rHDoarZKhfLm@t>etnLD$M)VPGsasI53}8!m{U0}y(IC{&iZ7U@Z(z4w(uZ zdD~j}0zR}v9-Sy-)WBcf^Xq4217k{qqRfJRo(bPOX3BrNq`T>@q1(e(-elb6Mw<&;$T^(=;mp literal 0 HcmV?d00001 diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-manager.css b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-manager.css new file mode 100755 index 000000000..911693b62 --- /dev/null +++ b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-manager.css @@ -0,0 +1,91 @@ +.fb-container { + margin-top: 1rem; +} +.fb-container .cbi-button { + height: 1.8rem; +} +.fb-container .cbi-input-text { + margin-bottom: 1rem; + width: 100%; +} +.fb-container .panel-title { + padding-bottom: 0; + width: 50%; + border-bottom: none; +} +.fb-container .panel-container { + display: flex; + align-items: center; + justify-content: space-between; + padding-bottom: 1rem; + border-bottom: 1px solid #eee; +} +.fb-container .upload-container { + display: none; + margin: 1rem 0; +} +.fb-container .upload-file { + margin-right: 2rem; +} +.fb-container .cbi-value-field { + text-align: left; +} +.fb-container .parent-icon strong { + margin-left: 1rem; +} +.fb-container td[class$="-icon"] { + cursor: pointer; +} +.fb-container .file-icon, .fb-container .folder-icon, .fb-container .link-icon { + position: relative; +} +.fb-container .file-icon:before, .fb-container .folder-icon:before, .fb-container .link-icon:before { + display: inline-block; + width: 1.5rem; + height: 1.5rem; + content: ''; + background-size: contain; + margin: 0 0.5rem 0 1rem; + vertical-align: middle; +} +.fb-container .file-icon:before { + background-image: url(file-icon.png); +} +.fb-container .folder-icon:before { + background-image: url(folder-icon.png); +} +.fb-container .link-icon:before { + background-image: url(link-icon.png); +} +@media screen and (max-width: 480px) { + .fb-container .upload-file { + width: 14.6rem; + } + .fb-container .cbi-value-owner, + .fb-container .cbi-value-perm { + display: none; + } +} + +.cbi-section-table { + width: 100%; +} + +.cbi-section-table-cell { + text-align: right; +} + +.cbi-button-install { +border-color: #c44; + color: #c44; + margin-left: 3px; +} + +.cbi-value-field { + padding: 10px 0; +} + +.parent-icon { + height: 1.8rem; + padding: 10px 0; +} \ No newline at end of file diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/folder-icon.png b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/folder-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..1370df3ad554fcb4d11aa0a72510dd3011cb816b GIT binary patch literal 1292 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD~={fpJ5CPlzj!I|_zS2>kviS_E`% ze@T#EFaskKGYcy_2PYRdFCV{vkf@Z5tfH!#x`w8fw!Wc}v8kDbjjg?lo4bdnkDq@~ zNLWNlrlO|7@I&aaqIS-d-oqce)9C$^A|5)y?Oio-m(|)^6tj@ffbcxT$swdA#S9dDM(%YwA z=;`}t7X5o_cb4ab+U_%F*2&+yf4uTu`aSv6Ja0aq(Nkn#*l^0gUv=J|pA)vGDNXH| z5%v0TKlc`43d@{VRt#TOUdn344I z@hKL)O`5@Fmn5gzE%#Z_?rWK(J~!oMUO$Ulc&~%n!wIve^Uc&^UG?bc&k5U^ru=(j z@`QzLrH*H?*MqJt41c#ox+Tos!|->br&GfhO@k9=UK}j*vdPWQ;8$FBYF>a>4u(+{}*QfsHlKk>Zp>C@i+ z=-vG8o4>hkyxc=p^WV?EPtm_nYx(`x^Fv|LOMcFc{wo~4#ynGFUisp>jo<(Kx0>Jm zv2ORj?3$<7m1}nIe$U6#pOIMcz^`O^KR5$71pQ;2AX!`B8su&V67Y2Ob6Mw<&;$S{ CYKQCq literal 0 HcmV?d00001 diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/images.svg b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/images.svg new file mode 100755 index 000000000..90ca5a1c7 --- /dev/null +++ b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/images.svg @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/link-icon.png b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/link-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..03cc82cdfabae20c1036959e6244ba5039f74697 GIT binary patch literal 1622 zcmV-c2C4apP) zTWB0r7{`CvG(@YF+Ik_0m)2IR7C|eeQV{DEMU;wAE9isZi=a^9kCznM9+=gj%O9~|iA?Ch8G|LvKX zvojMgeDf4=0GI-r5w@eiYrtSt1E87hgb!HSz5)jOD;Wlz+y%TJx`-UC0475hkrF!y z|EbQ~jx;J63Y}aZx_|<#Gy(i^GIRk&FaiAWLFfXCUp~Y|grgsLkMIX~ z;?`HLNi`mIEI~P-w`uS~5@_sDlIxvK}}VL6M_I9?R1z#|E36NA7Z}R<1N{Sh4(!8SZE_Zv$+?YKISw53yv=Fgxz?YfS}b~!eD<6M zUIvzgC^i9NnF#<`1RT!sqAzf}3!@y@68?A#fUP-Rup1cgJrW8T0e&Wu8Q@D{=g)An zg;9=J!fyf$;||)obvywqt6(s+5mWe0fM_pZ#`C~v zpbp_T8^|u;oGv&BT8Vzz&#)Uq{8MH4XMJzb1n|o+)rEhkwO#LbAWQZYKCXyKonflm z=l{g{FW-EBi)aFPpjY8%_>{l|C`qrw&+sLI2~dJi;b-`ezyv5r=qGj$KYod<9td;+`)+|mA@Ccs=$3co8R zz=fy^A54ID)P)ZwK!(cj!2|%s;e!dFI(*PAfco%3uK*T)3ylI;_-$wtpvv$^sag1- zOMoFP{5fb5z`~yg4FXvB3y``17Je5}7Qn(6kg5O{zK|3Ju<&z`ngAAlPErye_V5=2 zdw{79+n)kH0xl}~9=SFI|p1p)eSSG!gf{{8p~KT1*%U@6r+$1wTuAq@fk!ri&!6BXe@8Ui$d&A4Cm>;pC7 zLmC1Ai~;vjUIJC&LplOLc?r~o4`~Si#U)S~KBOlAiUmAeTUO_>isu&|L!c z;X~R2!2A+e_$^Ww0M1J=*82N5Sor^=<(EK?0c&wz$9jL}ex1=U17tL@@aLdO0HXsY zfO1R#<(L4P>u0=T5&T2kj}++9rF zkmTW&Ey!+=+&13^jILY^9HaXf|B6f!uUrnC6BKs_+0Bi{T;4$TA=?qEz)yt*{s1fq zRAXJ)jQlqAdji$S!@>faz+UXMP|9P#zsR3K(DUg(qYwDLOM&fe9Jn(`rS)I{compN zKBilPRNBTS@;x?vm_@O**oj05{{=dgd% + + + + + + + + + + + diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/tar.min.js b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/tar.min.js new file mode 100755 index 000000000..d9c06667f --- /dev/null +++ b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/tar.min.js @@ -0,0 +1,185 @@ +// https://github.com/thiscouldbebetter/TarFileExplorer +class TarFileTypeFlag +{constructor(value,name) +{this.value=value;this.id="_"+this.value;this.name=name;} +static _instances;static Instances() +{if(TarFileTypeFlag._instances==null) +{TarFileTypeFlag._instances=new TarFileTypeFlag_Instances();} +return TarFileTypeFlag._instances;}} +class TarFileTypeFlag_Instances +{constructor() +{this.Normal=new TarFileTypeFlag("0","Normal");this.HardLink=new TarFileTypeFlag("1","Hard Link");this.SymbolicLink=new TarFileTypeFlag("2","Symbolic Link");this.CharacterSpecial=new TarFileTypeFlag("3","Character Special");this.BlockSpecial=new TarFileTypeFlag("4","Block Special");this.Directory=new TarFileTypeFlag("5","Directory");this.FIFO=new TarFileTypeFlag("6","FIFO");this.ContiguousFile=new TarFileTypeFlag("7","Contiguous File");this.LongFilePath=new TarFileTypeFlag("L","././@LongLink");this._All=[this.Normal,this.HardLink,this.SymbolicLink,this.CharacterSpecial,this.BlockSpecial,this.Directory,this.FIFO,this.ContiguousFile,this.LongFilePath,];for(var i=0;ia+=String.fromCharCode(b),"");entryNext.header.fileName=entryNext.header.fileName.replace(/\0/g,"");entries.splice(i,1);i--;}}} +downloadAs(fileNameToSaveAs) +{return FileHelper.saveBytesAsFile +(this.toBytes(),fileNameToSaveAs)} +entriesForDirectories() +{return this.entries.filter(x=>x.header.typeFlag.name==TarFileTypeFlag.Instances().Directory);} +toBytes() +{this.toBytes_PrependLongPathEntriesAsNeeded();var fileAsBytes=[];var entriesAsByteArrays=this.entries.map(x=>x.toBytes());this.consolidateLongPathEntries();for(var i=0;imaxLength) +{var entryFileNameAsBytes=entryFileName.split("").map(x=>x.charCodeAt(0));var entryContainingLongPathToPrepend=TarFileEntry.fileNew +(typeFlagLongPath.name,entryFileNameAsBytes);entryContainingLongPathToPrepend.header.typeFlag=typeFlagLongPath;entryContainingLongPathToPrepend.header.timeModifiedInUnixFormat=entryHeader.timeModifiedInUnixFormat;entryContainingLongPathToPrepend.header.checksumCalculate();entryHeader.fileName=entryFileName.substr(0,maxLength)+String.fromCharCode(0);entries.splice(i,0,entryContainingLongPathToPrepend);i++;}}} +toString() +{var newline="\n";var returnValue="[TarFile]"+newline;for(var i=0;i{var fileLoadedAsBinaryString=fileLoadedEvent.target.result;var fileLoadedAsBytes=ByteHelper.stringUTF8ToBytes(fileLoadedAsBinaryString);callback(fileToLoad.name,fileLoadedAsBytes);} +fileReader.readAsBinaryString(fileToLoad);} +static loadFileAsText(fileToLoad,callback) +{var fileReader=new FileReader();fileReader.onload=(fileLoadedEvent)=>{var textFromFileLoaded=fileLoadedEvent.target.result;callback(fileToLoad.name,textFromFileLoaded);};fileReader.readAsText(fileToLoad);} +static saveBytesAsFile(bytesToWrite,fileNameToSaveAs) +{var bytesToWriteAsArrayBuffer=new ArrayBuffer(bytesToWrite.length);var bytesToWriteAsUIntArray=new Uint8Array(bytesToWriteAsArrayBuffer);for(var i=0;i + + + + + diff --git a/luci-app-dockerman/luasrc/controller/dockerman.lua b/luci-app-dockerman/luasrc/controller/dockerman.lua new file mode 100755 index 000000000..7aeed56e1 --- /dev/null +++ b/luci-app-dockerman/luasrc/controller/dockerman.lua @@ -0,0 +1,614 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +local docker = require "luci.model.docker" +-- local uci = (require "luci.model.uci").cursor() + +module("luci.controller.dockerman",package.seeall) + +function index() + entry({"admin", "docker"}, + alias("admin", "docker", "config"), + _("Docker"), + 40).acl_depends = { "luci-app-dockerman" } + + entry({"admin", "docker", "config"},cbi("dockerman/configuration"),_("Configuration"), 8).leaf=true + + -- local uci = (require "luci.model.uci").cursor() + -- if uci:get_bool("dockerd", "dockerman", "remote_endpoint") then + -- local host = uci:get("dockerd", "dockerman", "remote_host") + -- local port = uci:get("dockerd", "dockerman", "remote_port") + -- if not host or not port then + -- return + -- end + -- else + -- local socket = uci:get("dockerd", "dockerman", "socket_path") or "/var/run/docker.sock" + -- if socket and not nixio.fs.access(socket) then + -- return + -- end + -- end + + -- if (require "luci.model.docker").new():_ping().code ~= 200 then + -- return + -- end + + entry({"admin", "docker", "overview"}, form("dockerman/overview"),_("Overview"), 2).leaf=true + entry({"admin", "docker", "containers"}, form("dockerman/containers"), _("Containers"), 3).leaf=true + entry({"admin", "docker", "images"}, form("dockerman/images"), _("Images"), 4).leaf=true + entry({"admin", "docker", "networks"}, form("dockerman/networks"), _("Networks"), 5).leaf=true + entry({"admin", "docker", "volumes"}, form("dockerman/volumes"), _("Volumes"), 6).leaf=true + entry({"admin", "docker", "events"}, call("action_events"), _("Events"), 7) + + entry({"admin", "docker", "newcontainer"}, form("dockerman/newcontainer")).leaf=true + entry({"admin", "docker", "newnetwork"}, form("dockerman/newnetwork")).leaf=true + entry({"admin", "docker", "container"}, form("dockerman/container")).leaf=true + + entry({"admin", "docker", "container_stats"}, call("action_get_container_stats")).leaf=true + entry({"admin", "docker", "containers_stats"}, call("action_get_containers_stats")).leaf=true + entry({"admin", "docker", "get_system_df"}, call("action_get_system_df")).leaf=true + entry({"admin", "docker", "container_get_archive"}, call("download_archive")).leaf=true + entry({"admin", "docker", "container_put_archive"}, call("upload_archive")).leaf=true + entry({"admin", "docker", "container_list_file"}, call("list_file")).leaf=true + entry({"admin", "docker", "container_remove_file"}, call("remove_file")).leaf=true + entry({"admin", "docker", "container_rename_file"}, call("rename_file")).leaf=true + entry({"admin", "docker", "container_export"}, call("export_container")).leaf=true + entry({"admin", "docker", "images_save"}, call("save_images")).leaf=true + entry({"admin", "docker", "images_load"}, call("load_images")).leaf=true + entry({"admin", "docker", "images_import"}, call("import_images")).leaf=true + entry({"admin", "docker", "images_get_tags"}, call("get_image_tags")).leaf=true + entry({"admin", "docker", "images_tag"}, call("tag_image")).leaf=true + entry({"admin", "docker", "images_untag"}, call("untag_image")).leaf=true + entry({"admin", "docker", "confirm"}, call("action_confirm")).leaf=true +end + +function action_get_system_df() + local res = docker.new():df() + luci.http.status(res.code, res.message) + luci.http.prepare_content("application/json") + luci.http.write_json(res.body) +end + +function scandir(id, directory) + local cmd_docker = luci.util.exec("command -v docker"):match("^.+docker") or nil + if not cmd_docker or cmd_docker:match("^%s+$") then + return + end + local i, t, popen = 0, {}, io.popen + local uci = (require "luci.model.uci").cursor() + local remote = uci:get_bool("dockerd", "dockerman", "remote_endpoint") + local socket_path = not remote and uci:get("dockerd", "dockerman", "socket_path") or nil + local host = remote and uci:get("dockerd", "dockerman", "remote_host") or nil + local port = remote and uci:get("dockerd", "dockerman", "remote_port") or nil + if remote and host and port then + hosts = "tcp://" .. host .. ':'.. port + elseif socket_path then + hosts = "unix://" .. socket_path + else + return + end + local pfile = popen(cmd_docker .. ' -H "'.. hosts ..'" exec ' ..id .." ls -lh \""..directory.."\" | egrep -v '^total'") + for fileinfo in pfile:lines() do + i = i + 1 + t[i] = fileinfo + end + pfile:close() + return t +end + +function list_response(id, path, success) + luci.http.prepare_content("application/json") + local result + if success then + local rv = scandir(id, path) + result = { + ec = 0, + data = rv + } + else + result = { + ec = 1 + } + end + luci.http.write_json(result) +end + +function list_file(id) + local path = luci.http.formvalue("path") + list_response(id, path, true) +end + +function rename_file(id) + local filepath = luci.http.formvalue("filepath") + local newpath = luci.http.formvalue("newpath") + local cmd_docker = luci.util.exec("command -v docker"):match("^.+docker") or nil + if not cmd_docker or cmd_docker:match("^%s+$") then + return + end + local uci = (require "luci.model.uci").cursor() + local remote = uci:get_bool("dockerd", "dockerman", "remote_endpoint") + local socket_path = not remote and uci:get("dockerd", "dockerman", "socket_path") or nil + local host = remote and uci:get("dockerd", "dockerman", "remote_host") or nil + local port = remote and uci:get("dockerd", "dockerman", "remote_port") or nil + if remote and host and port then + hosts = "tcp://" .. host .. ':'.. port + elseif socket_path then + hosts = "unix://" .. socket_path + else + return + end + local success = os.execute(cmd_docker .. ' -H "'.. hosts ..'" exec '.. id ..' mv "'..filepath..'" "'..newpath..'"') + list_response(nixio.fs.dirname(filepath), success) +end + +function remove_file(id) + local path = luci.http.formvalue("path") + local isdir = luci.http.formvalue("isdir") + local cmd_docker = luci.util.exec("command -v docker"):match("^.+docker") or nil + if not cmd_docker or cmd_docker:match("^%s+$") then + return + end + local uci = (require "luci.model.uci").cursor() + local remote = uci:get_bool("dockerd", "dockerman", "remote_endpoint") + local socket_path = not remote and uci:get("dockerd", "dockerman", "socket_path") or nil + local host = remote and uci:get("dockerd", "dockerman", "remote_host") or nil + local port = remote and uci:get("dockerd", "dockerman", "remote_port") or nil + if remote and host and port then + hosts = "tcp://" .. host .. ':'.. port + elseif socket_path then + hosts = "unix://" .. socket_path + else + return + end + path = path:gsub("<>", "/") + path = path:gsub(" ", "\ ") + local success + if isdir then + success = os.execute(cmd_docker .. ' -H "'.. hosts ..'" exec '.. id ..' rm -r "'..path..'"') + else + success = os.remove(path) + end + list_response(nixio.fs.dirname(path), success) +end + +function action_events() + local logs = "" + local query ={} + + local dk = docker.new() + query["until"] = os.time() + local events = dk:events({query = query}) + + if events.code == 200 then + for _, v in ipairs(events.body) do + local date = "unknown" + if v and v.time then + date = os.date("%Y-%m-%d %H:%M:%S", v.time) + end + + local name = v.Actor.Attributes.name or "unknown" + local action = v.Action or "unknown" + + if v and v.Type == "container" then + local id = v.Actor.ID or "unknown" + logs = logs .. string.format("[%s] %s %s Container ID: %s Container Name: %s\n", date, v.Type, action, id, name) + elseif v.Type == "network" then + local container = v.Actor.Attributes.container or "unknown" + local network = v.Actor.Attributes.type or "unknown" + logs = logs .. string.format("[%s] %s %s Container ID: %s Network Name: %s Network type: %s\n", date, v.Type, action, container, name, network) + elseif v.Type == "image" then + local id = v.Actor.ID or "unknown" + logs = logs .. string.format("[%s] %s %s Image: %s Image name: %s\n", date, v.Type, action, id, name) + end + end + end + + luci.template.render("dockerman/logs", {self={syslog = logs, title="Events"}}) +end + +local calculate_cpu_percent = function(d) + if type(d) ~= "table" then + return + end + + local cpu_count = tonumber(d["cpu_stats"]["online_cpus"]) + local cpu_percent = 0.0 + local cpu_delta = tonumber(d["cpu_stats"]["cpu_usage"]["total_usage"]) - tonumber(d["precpu_stats"]["cpu_usage"]["total_usage"]) + local system_delta = tonumber(d["cpu_stats"]["system_cpu_usage"]) -- tonumber(d["precpu_stats"]["system_cpu_usage"]) + if system_delta > 0.0 then + cpu_percent = string.format("%.2f", cpu_delta / system_delta * 100.0 * cpu_count) + end + + return cpu_percent +end + +local get_memory = function(d) + if type(d) ~= "table" then + return + end + + -- local limit = string.format("%.2f", tonumber(d["memory_stats"]["limit"]) / 1024 / 1024) + -- local usage = string.format("%.2f", (tonumber(d["memory_stats"]["usage"]) - tonumber(d["memory_stats"]["stats"]["total_cache"])) / 1024 / 1024) + -- return usage .. "MB / " .. limit.. "MB" + + local limit =tonumber(d["memory_stats"]["limit"]) + local usage = tonumber(d["memory_stats"]["usage"]) + -- - tonumber(d["memory_stats"]["stats"]["total_cache"]) + + return usage, limit +end + +local get_rx_tx = function(d) + if type(d) ~="table" then + return + end + + local data = {} + if type(d["networks"]) == "table" then + for e, v in pairs(d["networks"]) do + data[e] = { + bw_tx = tonumber(v.tx_bytes), + bw_rx = tonumber(v.rx_bytes) + } + end + end + + return data +end + +local function get_stat(container_id) + if container_id then + local dk = docker.new() + local response = dk.containers:inspect({id = container_id}) + if response.code == 200 and response.body.State.Running then + response = dk.containers:stats({id = container_id, query = {stream = false, ["one-shot"] = true}}) + if response.code == 200 then + local container_stats = response.body + local cpu_percent = calculate_cpu_percent(container_stats) + local mem_useage, mem_limit = get_memory(container_stats) + local bw_rxtx = get_rx_tx(container_stats) + return response.code, response.body.message, { + cpu_percent = cpu_percent, + memory = { + mem_useage = mem_useage, + mem_limit = mem_limit + }, + bw_rxtx = bw_rxtx + } + else + return response.code, response.body.message + end + else + if response.code == 200 then + return 500, "container "..container_id.." not running" + else + return response.code, response.body.message + end + end + else + return 404, "No container name or id" + end +end +function action_get_container_stats(container_id) + local code, msg, res = get_stat(container_id) + luci.http.status(code, msg) + luci.http.prepare_content("application/json") + luci.http.write_json(res) +end + +function action_get_containers_stats() + local res = luci.http.formvalue(containers) or "" + local stats = {} + res = luci.jsonc.parse(res.containers) + if res and type(res) == "table" then + for i, v in ipairs(res) do + _,_,stats[v] = get_stat(v) + end + end + luci.http.status(200, "OK") + luci.http.prepare_content("application/json") + luci.http.write_json(stats) +end + +function action_confirm() + local data = docker:read_status() + if data then + data = data:gsub("\n","
"):gsub(" "," ") + code = 202 + msg = data + else + code = 200 + msg = "finish" + data = "finish" + end + + luci.http.status(code, msg) + luci.http.prepare_content("application/json") + luci.http.write_json({info = data}) +end + +function export_container(id) + local dk = docker.new() + local first + + local cb = function(res, chunk) + if res.code == 200 then + if not first then + first = true + luci.http.header('Content-Disposition', 'inline; filename="'.. id ..'.tar"') + luci.http.header('Content-Type', 'application\/x-tar') + end + luci.ltn12.pump.all(chunk, luci.http.write) + else + if not first then + first = true + luci.http.prepare_content("text/plain") + end + luci.ltn12.pump.all(chunk, luci.http.write) + end + end + + local res = dk.containers:export({id = id}, cb) +end + +function download_archive() + local id = luci.http.formvalue("id") + local path = luci.http.formvalue("path") + local filename = luci.http.formvalue("filename") or "archive" + local dk = docker.new() + local first + + local cb = function(res, chunk) + if res and res.code and res.code == 200 then + if not first then + first = true + luci.http.header('Content-Disposition', 'inline; filename="'.. filename .. '.tar"') + luci.http.header('Content-Type', 'application\/x-tar') + end + luci.ltn12.pump.all(chunk, luci.http.write) + else + if not first then + first = true + luci.http.status(res and res.code or 500, msg or "unknow") + luci.http.prepare_content("text/plain") + end + luci.ltn12.pump.all(chunk, luci.http.write) + end + end + + local res = dk.containers:get_archive({ + id = id, + query = { + path = luci.http.urlencode(path) + } + }, cb) +end + +function upload_archive(container_id) + local path = luci.http.formvalue("upload-path") + local dk = docker.new() + local ltn12 = require "luci.ltn12" + + local rec_send = function(sinkout) + luci.http.setfilehandler(function (meta, chunk, eof) + if chunk then + ltn12.pump.step(ltn12.source.string(chunk), sinkout) + end + end) + end + + local res = dk.containers:put_archive({ + id = container_id, + query = { + path = luci.http.urlencode(path) + }, + body = rec_send + }) + + local msg = res and res.message or res.body and res.body.message or nil + luci.http.status(res and res.code or 500, msg or "unknow") + luci.http.prepare_content("application/json") + luci.http.write_json({message = msg or "unknow"}) +end + +-- function save_images() +-- local names = luci.http.formvalue("names") +-- local dk = docker.new() +-- local first + +-- local cb = function(res, chunk) +-- if res.code == 200 then +-- if not first then +-- first = true +-- luci.http.status(res.code, res.message) +-- luci.http.header('Content-Disposition', 'inline; filename="'.. "images" ..'.tar"') +-- luci.http.header('Content-Type', 'application\/x-tar') +-- end +-- luci.ltn12.pump.all(chunk, luci.http.write) +-- else +-- if not first then +-- first = true +-- luci.http.prepare_content("text/plain") +-- end +-- luci.ltn12.pump.all(chunk, luci.http.write) +-- end +-- end + +-- docker:write_status("Images: saving" .. " " .. names .. "...") +-- local res = dk.images:get({ +-- query = { +-- names = luci.http.urlencode(names) +-- } +-- }, cb) +-- docker:clear_status() + +-- local msg = res and res.body and res.body.message or nil +-- luci.http.status(res.code, msg) +-- luci.http.prepare_content("application/json") +-- luci.http.write_json({message = msg}) +-- end + +function load_images() + local archive = luci.http.formvalue("upload-archive") + local dk = docker.new() + local ltn12 = require "luci.ltn12" + + local rec_send = function(sinkout) + luci.http.setfilehandler(function (meta, chunk, eof) + if chunk then + ltn12.pump.step(ltn12.source.string(chunk), sinkout) + end + end) + end + + docker:write_status("Images: loading...") + local res = dk.images:load({body = rec_send}) + local msg = res and res.body and ( res.body.message or res.body.stream or res.body.error ) or nil + if res and res.code == 200 and msg and msg:match("Loaded image ID") then + docker:clear_status() + else + docker:append_status("code:" .. (res and res.code or "500") .." ".. (msg or "unknow")) + end + + luci.http.status(res and res.code or 500, msg or "unknow") + luci.http.prepare_content("application/json") + luci.http.write_json({message = msg or "unknow"}) +end + +function import_images() + local src = luci.http.formvalue("src") + local itag = luci.http.formvalue("tag") + local dk = docker.new() + local ltn12 = require "luci.ltn12" + + local rec_send = function(sinkout) + luci.http.setfilehandler(function (meta, chunk, eof) + if chunk then + ltn12.pump.step(ltn12.source.string(chunk), sinkout) + end + end) + end + + docker:write_status("Images: importing".. " ".. itag .."...\n") + local repo = itag and itag:match("^([^:]+)") + local tag = itag and itag:match("^[^:]-:([^:]+)") + local res = dk.images:create({ + query = { + fromSrc = luci.http.urlencode(src or "-"), + repo = repo or nil, + tag = tag or nil + }, + body = not src and rec_send or nil + }, docker.import_image_show_status_cb) + + local msg = res and res.body and ( res.body.message )or nil + if not msg and #res.body == 0 then + msg = res.body.status or res.body.error + elseif not msg and #res.body >= 1 then + msg = res.body[#res.body].status or res.body[#res.body].error + end + + if res.code == 200 and msg and msg:match("sha256:") then + docker:clear_status() + else + docker:append_status("code:" .. (res and res.code or "500") .." ".. (msg or "unknow")) + end + + luci.http.status(res and res.code or 500, msg or "unknow") + luci.http.prepare_content("application/json") + luci.http.write_json({message = msg or "unknow"}) +end + +function get_image_tags(image_id) + if not image_id then + luci.http.status(400, "no image id") + luci.http.prepare_content("application/json") + luci.http.write_json({message = "no image id"}) + return + end + + local dk = docker.new() + local res = dk.images:inspect({ + id = image_id + }) + local msg = res and res.body and res.body.message or nil + luci.http.status(res and res.code or 500, msg or "unknow") + luci.http.prepare_content("application/json") + + if res.code == 200 then + local tags = res.body.RepoTags + luci.http.write_json({tags = tags}) + else + local msg = res and res.body and res.body.message or nil + luci.http.write_json({message = msg or "unknow"}) + end +end + +function tag_image(image_id) + local src = luci.http.formvalue("tag") + local image_id = image_id or luci.http.formvalue("id") + + if type(src) ~= "string" or not image_id then + luci.http.status(400, "no image id or tag") + luci.http.prepare_content("application/json") + luci.http.write_json({message = "no image id or tag"}) + return + end + + local repo = src:match("^([^:]+)") + local tag = src:match("^[^:]-:([^:]+)") + local dk = docker.new() + local res = dk.images:tag({ + id = image_id, + query={ + repo=repo, + tag=tag + } + }) + local msg = res and res.body and res.body.message or nil + luci.http.status(res and res.code or 500, msg or "unknow") + luci.http.prepare_content("application/json") + + if res.code == 201 then + local tags = res.body.RepoTags + luci.http.write_json({tags = tags}) + else + local msg = res and res.body and res.body.message or nil + luci.http.write_json({message = msg or "unknow"}) + end +end + +function untag_image(tag) + local tag = tag or luci.http.formvalue("tag") + + if not tag then + luci.http.status(400, "no tag name") + luci.http.prepare_content("application/json") + luci.http.write_json({message = "no tag name"}) + return + end + + local dk = docker.new() + local res = dk.images:inspect({name = tag}) + + if res.code == 200 then + local tags = res.body.RepoTags + if #tags > 1 then + local r = dk.images:remove({name = tag}) + local msg = r and r.body and r.body.message or nil + luci.http.status(r.code, msg) + luci.http.prepare_content("application/json") + luci.http.write_json({message = msg}) + else + luci.http.status(500, "Cannot remove the last tag") + luci.http.prepare_content("application/json") + luci.http.write_json({message = "Cannot remove the last tag"}) + end + else + local msg = res and res.body and res.body.message or nil + luci.http.status(res and res.code or 500, msg or "unknow") + luci.http.prepare_content("application/json") + luci.http.write_json({message = msg or "unknow"}) + end +end diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua new file mode 100755 index 000000000..f62650fe5 --- /dev/null +++ b/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua @@ -0,0 +1,152 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2021 Florian Eckert +Copyright 2021 lisaac +]]-- + +local uci = (require "luci.model.uci").cursor() + +local m, s, o + +m = Map("dockerd", + translate("Docker - Configuration"), + translate("DockerMan is a simple docker manager client for LuCI")) + +if nixio.fs.access("/usr/bin/dockerd") and not m.uci:get_bool("dockerd", "dockerman", "remote_endpoint") then + s = m:section(NamedSection, "globals", "section", translate("Docker Daemon settings")) + + o = s:option(Flag, "auto_start", translate("Auto start")) + o.rmempty = false + o.write = function(self, section, value) + if value == "1" then + luci.util.exec("/etc/init.d/dockerd enable") + else + luci.util.exec("/etc/init.d/dockerd disable") + end + m.uci:set("dockerd", "globals", "auto_start", value) + end + + o = s:option(Value, "data_root", + translate("Docker Root Dir")) + o.placeholder = "/opt/docker/" + o:depends("remote_endpoint", 0) + + o = s:option(Value, "bip", + translate("Default bridge"), + translate("Configure the default bridge network")) + o.placeholder = "172.17.0.1/16" + o.datatype = "ipaddr" + o:depends("remote_endpoint", 0) + + o = s:option(DynamicList, "registry_mirrors", + translate("Registry Mirrors"), + translate("It replaces the daemon registry mirrors with a new set of registry mirrors")) + o:value("https://hub-mirror.c.163.com", "https://hub-mirror.c.163.com") + o:depends("remote_endpoint", 0) + o.forcewrite = true + + o = s:option(ListValue, "log_level", + translate("Log Level"), + translate('Set the logging level')) + o:value("debug", translate("Debug")) + o:value("", translate("Info")) -- This is the default debug level from the deamon is optin is not set + o:value("warn", translate("Warning")) + o:value("error", translate("Error")) + o:value("fatal", translate("Fatal")) + o.rmempty = true + o:depends("remote_endpoint", 0) + + o = s:option(DynamicList, "hosts", + translate("Client connection"), + translate('Specifies where the Docker daemon will listen for client connections (default: unix:///var/run/docker.sock)')) + o:value("unix:///var/run/docker.sock", "unix:///var/run/docker.sock") + o:value("tcp://0.0.0.0:2375", "tcp://0.0.0.0:2375") + o.rmempty = true + o:depends("remote_endpoint", 0) +end + +s = m:section(NamedSection, "dockerman", "section", translate("DockerMan settings")) +s:tab("ac", translate("Access Control")) +s:tab("dockerman", translate("DockerMan")) + +o = s:taboption("dockerman", Flag, "remote_endpoint", + translate("Remote Endpoint"), + translate("Connect to remote docker endpoint")) +o.rmempty = false +o.validate = function(self, value, sid) + local res = luci.http.formvaluetable("cbid.dockerd") + if res["dockerman.remote_endpoint"] == "1" then + if res["dockerman.remote_port"] and res["dockerman.remote_port"] ~= "" and res["dockerman.remote_host"] and res["dockerman.remote_host"] ~= "" then + return 1 + else + return nil, translate("Please input the PORT or HOST IP of remote docker instance!") + end + else + if not res["dockerman.socket_path"] then + return nil, translate("Please input the SOCKET PATH of docker daemon!") + end + end + return 0 +end + +o = s:taboption("dockerman", Value, "socket_path", + translate("Docker Socket Path")) +o.default = "/var/run/docker.sock" +o.placeholder = "/var/run/docker.sock" +o:depends("remote_endpoint", 0) + +o = s:taboption("dockerman", Value, "remote_host", + translate("Remote Host"), + translate("Host or IP Address for the connection to a remote docker instance")) +o.datatype = "host" +o.placeholder = "10.1.1.2" +o:depends("remote_endpoint", 1) + +o = s:taboption("dockerman", Value, "remote_port", + translate("Remote Port")) +o.placeholder = "2375" +o.datatype = "port" +o:depends("remote_endpoint", 1) + +-- o = s:taboption("dockerman", Value, "status_path", translate("Action Status Tempfile Path"), translate("Where you want to save the docker status file")) +-- o = s:taboption("dockerman", Flag, "debug", translate("Enable Debug"), translate("For debug, It shows all docker API actions of luci-app-dockerman in Debug Tempfile Path")) +-- o.enabled="true" +-- o.disabled="false" +-- o = s:taboption("dockerman", Value, "debug_path", translate("Debug Tempfile Path"), translate("Where you want to save the debug tempfile")) + +if nixio.fs.access("/usr/bin/dockerd") and not m.uci:get_bool("dockerd", "dockerman", "remote_endpoint") then + o = s:taboption("ac", DynamicList, "ac_allowed_interface", translate("Allowed access interfaces"), translate("Which interface(s) can access containers under the bridge network, fill-in Interface Name")) + local interfaces = luci.sys and luci.sys.net and luci.sys.net.devices() or {} + for i, v in ipairs(interfaces) do + o:value(v, v) + end + o = s:taboption("ac", DynamicList, "ac_allowed_ports", translate("Ports allowed to be accessed"), translate("Which Port(s) can be accessed, it's not restricted by the Allowed Access interfaces configuration. Use this configuration with caution!")) + o.placeholder = "8080/tcp" + local docker = require "luci.model.docker" + local containers, res, lost_state + local dk = docker.new() + if dk:_ping().code ~= 200 then + lost_state = true + else + lost_state = false + res = dk.containers:list() + if res and res.code and res.code < 300 then + containers = res.body + end + end + + -- allowed_container.placeholder = "container name_or_id" + if containers then + for i, v in ipairs(containers) do + if v.State == "running" and v.Ports then + for _, port in ipairs(v.Ports) do + if port.PublicPort and port.IP and not string.find(port.IP,":") then + o:value(port.PublicPort.."/"..port.Type, v.Names[1]:sub(2) .. " | " .. port.PublicPort .. " | " .. port.Type) + end + end + end + end + end +end + +return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua new file mode 100755 index 000000000..20220ad8f --- /dev/null +++ b/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua @@ -0,0 +1,810 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +require "luci.util" + +local docker = require "luci.model.docker" +local dk = docker.new() + +container_id = arg[1] +local action = arg[2] or "info" + +local m, s, o +local images, networks, container_info, res + +if not container_id then + return +end + +res = dk.containers:inspect({id = container_id}) +if res.code < 300 then + container_info = res.body +else + return +end + +local get_ports = function(d) + local data + + if d.HostConfig and d.HostConfig.PortBindings then + for inter, out in pairs(d.HostConfig.PortBindings) do + data = (data and (data .. "
") or "") .. out[1]["HostPort"] .. ":" .. inter + end + end + + return data +end + +local get_env = function(d) + local data + + if d.Config and d.Config.Env then + for _,v in ipairs(d.Config.Env) do + data = (data and (data .. "
") or "") .. v + end + end + + return data +end + +local get_command = function(d) + local data + + if d.Config and d.Config.Cmd then + for _,v in ipairs(d.Config.Cmd) do + data = (data and (data .. " ") or "") .. v + end + end + + return data +end + +local get_mounts = function(d) + local data + + if d.Mounts then + for _,v in ipairs(d.Mounts) do + local v_sorce_d, v_dest_d + local v_sorce = "" + local v_dest = "" + for v_sorce_d in v["Source"]:gmatch('[^/]+') do + if v_sorce_d and #v_sorce_d > 12 then + v_sorce = v_sorce .. "/" .. v_sorce_d:sub(1,12) .. "..." + else + v_sorce = v_sorce .."/".. v_sorce_d + end + end + for v_dest_d in v["Destination"]:gmatch('[^/]+') do + if v_dest_d and #v_dest_d > 12 then + v_dest = v_dest .. "/" .. v_dest_d:sub(1,12) .. "..." + else + v_dest = v_dest .."/".. v_dest_d + end + end + data = (data and (data .. "
") or "") .. v_sorce .. ":" .. v["Destination"] .. (v["Mode"] ~= "" and (":" .. v["Mode"]) or "") + end + end + + return data +end + +local get_device = function(d) + local data + + if d.HostConfig and d.HostConfig.Devices then + for _,v in ipairs(d.HostConfig.Devices) do + data = (data and (data .. "
") or "") .. v["PathOnHost"] .. ":" .. v["PathInContainer"] .. (v["CgroupPermissions"] ~= "" and (":" .. v["CgroupPermissions"]) or "") + end + end + + return data +end + +local get_links = function(d) + local data + + if d.HostConfig and d.HostConfig.Links then + for _,v in ipairs(d.HostConfig.Links) do + data = (data and (data .. "
") or "") .. v + end + end + + return data +end + +local get_tmpfs = function(d) + local data + + if d.HostConfig and d.HostConfig.Tmpfs then + for k, v in pairs(d.HostConfig.Tmpfs) do + data = (data and (data .. "
") or "") .. k .. (v~="" and ":" or "")..v + end + end + + return data +end + +local get_dns = function(d) + local data + + if d.HostConfig and d.HostConfig.Dns then + for _, v in ipairs(d.HostConfig.Dns) do + data = (data and (data .. "
") or "") .. v + end + end + + return data +end + +local get_sysctl = function(d) + local data + + if d.HostConfig and d.HostConfig.Sysctls then + for k, v in pairs(d.HostConfig.Sysctls) do + data = (data and (data .. "
") or "") .. k..":"..v + end + end + + return data +end + +local get_networks = function(d) + local data={} + + if d.NetworkSettings and d.NetworkSettings.Networks and type(d.NetworkSettings.Networks) == "table" then + for k,v in pairs(d.NetworkSettings.Networks) do + data[k] = v.IPAddress or "" + end + end + + return data +end + + +local start_stop_remove = function(m, cmd) + local res + + docker:clear_status() + docker:append_status("Containers: " .. cmd .. " " .. container_id .. "...") + + if cmd ~= "upgrade" then + res = dk.containers[cmd](dk, {id = container_id}) + else + res = dk.containers_upgrade(dk, {id = container_id}) + end + + if res and res.code >= 300 then + docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message)) + luci.http.redirect(luci.dispatcher.build_url("admin/docker/container/"..container_id)) + else + docker:clear_status() + if cmd ~= "remove" and cmd ~= "upgrade" then + luci.http.redirect(luci.dispatcher.build_url("admin/docker/container/"..container_id)) + else + luci.http.redirect(luci.dispatcher.build_url("admin/docker/containers")) + end + end +end + +m=SimpleForm("docker", + translatef("Docker - Container (%s)", container_info.Name:sub(2)), + translate("On this page, the selected container can be managed.")) +m.redirect = luci.dispatcher.build_url("admin/docker/containers") + +s = m:section(SimpleSection) +s.template = "dockerman/apply_widget" +s.err=docker:read_status() +s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") +if s.err then + docker:clear_status() +end + +s = m:section(Table,{{}}) +s.notitle=true +s.rowcolors=false +s.template = "cbi/nullsection" + +o = s:option(Button, "_start") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle=translate("Start") +o.inputstyle = "apply" +o.forcewrite = true +o.write = function(self, section) + start_stop_remove(m,"start") +end + +o = s:option(Button, "_restart") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle=translate("Restart") +o.inputstyle = "reload" +o.forcewrite = true +o.write = function(self, section) + start_stop_remove(m,"restart") +end + +o = s:option(Button, "_stop") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle=translate("Stop") +o.inputstyle = "reset" +o.forcewrite = true +o.write = function(self, section) + start_stop_remove(m,"stop") +end + +o = s:option(Button, "_kill") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle=translate("Kill") +o.inputstyle = "reset" +o.forcewrite = true +o.write = function(self, section) + start_stop_remove(m,"kill") +end + +o = s:option(Button, "_export") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle=translate("Export") +o.inputstyle = "apply" +o.forcewrite = true +o.write = function(self, section) + luci.http.redirect(luci.dispatcher.build_url("admin/docker/container_export/"..container_id)) +end + +o = s:option(Button, "_upgrade") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle=translate("Upgrade") +o.inputstyle = "reload" +o.forcewrite = true +o.write = function(self, section) + start_stop_remove(m,"upgrade") +end + +o = s:option(Button, "_duplicate") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle=translate("Duplicate/Edit") +o.inputstyle = "add" +o.forcewrite = true +o.write = function(self, section) + luci.http.redirect(luci.dispatcher.build_url("admin/docker/newcontainer/duplicate/"..container_id)) +end + +o = s:option(Button, "_remove") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle=translate("Remove") +o.inputstyle = "remove" +o.forcewrite = true +o.write = function(self, section) + start_stop_remove(m,"remove") +end + +s = m:section(SimpleSection) +s.template = "dockerman/container" + +if action == "info" then + res = dk.networks:list() + if res.code < 300 then + networks = res.body + else + return + end + m.submit = false + m.reset = false + table_info = { + ["01name"] = { + _key = translate("Name"), + _value = container_info.Name:sub(2) or "-", + _button=translate("Update") + }, + ["02id"] = { + _key = translate("ID"), + _value = container_info.Id or "-" + }, + ["03image"] = { + _key = translate("Image"), + _value = container_info.Config.Image .. "
" .. container_info.Image + }, + ["04status"] = { + _key = translate("Status"), + _value = container_info.State and container_info.State.Status or "-" + }, + ["05created"] = { + _key = translate("Created"), + _value = container_info.Created or "-" + }, + } + + if container_info.State.Status == "running" then + table_info["06start"] = { + _key = translate("Start Time"), + _value = container_info.State and container_info.State.StartedAt or "-" + } + else + table_info["06start"] = { + _key = translate("Finish Time"), + _value = container_info.State and container_info.State.FinishedAt or "-" + } + end + + table_info["07healthy"] = { + _key = translate("Healthy"), + _value = container_info.State and container_info.State.Health and container_info.State.Health.Status or "-" + } + table_info["08restart"] = { + _key = translate("Restart Policy"), + _value = container_info.HostConfig and container_info.HostConfig.RestartPolicy and container_info.HostConfig.RestartPolicy.Name or "-", + _button=translate("Update") + } + table_info["081user"] = { + _key = translate("User"), + _value = container_info.Config and (container_info.Config.User ~="" and container_info.Config.User or "-") or "-" + } + table_info["09mount"] = { + _key = translate("Mount/Volume"), + _value = get_mounts(container_info) or "-" + } + table_info["10cmd"] = { + _key = translate("Command"), + _value = get_command(container_info) or "-" + } + table_info["11env"] = { + _key = translate("Env"), + _value = get_env(container_info) or "-" + } + table_info["12ports"] = { + _key = translate("Ports"), + _value = get_ports(container_info) or "-" + } + table_info["13links"] = { + _key = translate("Links"), + _value = get_links(container_info) or "-" + } + table_info["14device"] = { + _key = translate("Device"), + _value = get_device(container_info) or "-" + } + table_info["15tmpfs"] = { + _key = translate("Tmpfs"), + _value = get_tmpfs(container_info) or "-" + } + table_info["16dns"] = { + _key = translate("DNS"), + _value = get_dns(container_info) or "-" + } + table_info["17sysctl"] = { + _key = translate("Sysctl"), + _value = get_sysctl(container_info) or "-" + } + + info_networks = get_networks(container_info) + list_networks = {} + for _, v in ipairs (networks) do + if v and v.Name then + local parent = v.Options and v.Options.parent or nil + local ip = v.IPAM and v.IPAM.Config and v.IPAM.Config[1] and v.IPAM.Config[1].Subnet or nil + ipv6 = v.IPAM and v.IPAM.Config and v.IPAM.Config[2] and v.IPAM.Config[2].Subnet or nil + local network_name = v.Name .. " | " .. v.Driver .. (parent and (" | " .. parent) or "") .. (ip and (" | " .. ip) or "").. (ipv6 and (" | " .. ipv6) or "") + list_networks[v.Name] = network_name + end + end + + if type(info_networks)== "table" then + for k,v in pairs(info_networks) do + table_info["14network"..k] = { + _key = translate("Network"), + _value = k.. (v~="" and (" | ".. v) or ""), + _button=translate("Disconnect") + } + list_networks[k]=nil + end + end + + table_info["15connect"] = { + _key = translate("Connect Network"), + _value = list_networks ,_opts = "", + _button=translate("Connect") + } + + s = m:section(Table,table_info) + s.nodescr=true + s.formvalue=function(self, section) + return table_info + end + + o = s:option(DummyValue, "_key", translate("Info")) + o.width = "20%" + + o = s:option(ListValue, "_value") + o.render = function(self, section, scope) + if table_info[section]._key == translate("Name") then + self:reset_values() + self.template = "cbi/value" + self.size = 30 + self.keylist = {} + self.vallist = {} + self.default=table_info[section]._value + Value.render(self, section, scope) + elseif table_info[section]._key == translate("Restart Policy") then + self.template = "cbi/lvalue" + self:reset_values() + self.size = nil + self:value("no", "No") + self:value("unless-stopped", "Unless stopped") + self:value("always", "Always") + self:value("on-failure", "On failure") + self.default=table_info[section]._value + ListValue.render(self, section, scope) + elseif table_info[section]._key == translate("Connect Network") then + self.template = "cbi/lvalue" + self:reset_values() + self.size = nil + for k,v in pairs(list_networks) do + if k ~= "host" then + self:value(k,v) + end + end + self.default=table_info[section]._value + ListValue.render(self, section, scope) + else + self:reset_values() + self.rawhtml=true + self.template = "cbi/dvalue" + self.default=table_info[section]._value + DummyValue.render(self, section, scope) + end + end + o.forcewrite = true + o.write = function(self, section, value) + table_info[section]._value=value + end + o.validate = function(self, value) + return value + end + + o = s:option(Value, "_opts") + o.forcewrite = true + o.write = function(self, section, value) + table_info[section]._opts=value + end + o.validate = function(self, value) + return value + end + o.render = function(self, section, scope) + if table_info[section]._key==translate("Connect Network") then + self.template = "cbi/value" + self.keylist = {} + self.vallist = {} + self.placeholder = "10.1.1.254" + self.datatype = "ip4addr" + self.default=table_info[section]._opts + Value.render(self, section, scope) + else + self.rawhtml=true + self.template = "cbi/dvalue" + self.default=table_info[section]._opts + DummyValue.render(self, section, scope) + end + end + + o = s:option(Button, "_button") + o.forcewrite = true + o.render = function(self, section, scope) + if table_info[section]._button and table_info[section]._value ~= nil then + self.inputtitle=table_info[section]._button + self.template = "cbi/button" + self.inputstyle = "edit" + Button.render(self, section, scope) + else + self.template = "cbi/dvalue" + self.default="" + DummyValue.render(self, section, scope) + end + end + o.write = function(self, section, value) + local res + + docker:clear_status() + + if section == "01name" then + docker:append_status("Containers: rename " .. container_id .. "...") + local new_name = table_info[section]._value + res = dk.containers:rename({ + id = container_id, + query = { + name=new_name + } + }) + elseif section == "08restart" then + docker:append_status("Containers: update " .. container_id .. "...") + local new_restart = table_info[section]._value + res = dk.containers:update({ + id = container_id, + body = { + RestartPolicy = { + Name = new_restart + } + } + }) + elseif table_info[section]._key == translate("Network") then + local _,_,leave_network + + _, _, leave_network = table_info[section]._value:find("(.-) | .+") + leave_network = leave_network or table_info[section]._value + docker:append_status("Network: disconnect " .. leave_network .. container_id .. "...") + res = dk.networks:disconnect({ + name = leave_network, + body = { + Container = container_id + } + }) + elseif section == "15connect" then + local connect_network = table_info[section]._value + local network_opiton + if connect_network ~= "none" + and connect_network ~= "bridge" + and connect_network ~= "host" then + + network_opiton = table_info[section]._opts ~= "" and { + IPAMConfig={ + IPv4Address=table_info[section]._opts + } + } or nil + end + docker:append_status("Network: connect " .. connect_network .. container_id .. "...") + res = dk.networks:connect({ + name = connect_network, + body = { + Container = container_id, + EndpointConfig= network_opiton + } + }) + end + + if res and res.code > 300 then + docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message)) + else + docker:clear_status() + end + luci.http.redirect(luci.dispatcher.build_url("admin/docker/container/"..container_id.."/info")) + end +elseif action == "resources" then + s = m:section(SimpleSection) + o = s:option( Value, "cpus", + translate("CPUs"), + translate("Number of CPUs. Number is a fractional number. 0.000 means no limit.")) + o.placeholder = "1.5" + o.rmempty = true + o.datatype="ufloat" + o.default = container_info.HostConfig.NanoCpus / (10^9) + + o = s:option(Value, "cpushares", + translate("CPU Shares Weight"), + translate("CPU shares relative weight, if 0 is set, the system will ignore the value and use the default of 1024.")) + o.placeholder = "1024" + o.rmempty = true + o.datatype="uinteger" + o.default = container_info.HostConfig.CpuShares + + o = s:option(Value, "memory", + translate("Memory"), + translate("Memory limit (format: []). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M.")) + o.placeholder = "128m" + o.rmempty = true + o.default = container_info.HostConfig.Memory ~=0 and ((container_info.HostConfig.Memory / 1024 /1024) .. "M") or 0 + + o = s:option(Value, "blkioweight", + translate("Block IO Weight"), + translate("Block IO weight (relative weight) accepts a weight value between 10 and 1000.")) + o.placeholder = "500" + o.rmempty = true + o.datatype="uinteger" + o.default = container_info.HostConfig.BlkioWeight + + m.handle = function(self, state, data) + if state == FORM_VALID then + local memory = data.memory + if memory and memory ~= 0 then + _,_,n,unit = memory:find("([%d%.]+)([%l%u]+)") + if n then + unit = unit and unit:sub(1,1):upper() or "B" + if unit == "M" then + memory = tonumber(n) * 1024 * 1024 + elseif unit == "G" then + memory = tonumber(n) * 1024 * 1024 * 1024 + elseif unit == "K" then + memory = tonumber(n) * 1024 + else + memory = tonumber(n) + end + end + end + + request_body = { + BlkioWeight = tonumber(data.blkioweight), + NanoCPUs = tonumber(data.cpus)*10^9, + Memory = tonumber(memory), + CpuShares = tonumber(data.cpushares) + } + + docker:write_status("Containers: update " .. container_id .. "...") + local res = dk.containers:update({id = container_id, body = request_body}) + if res and res.code >= 300 then + docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message)) + else + docker:clear_status() + end + luci.http.redirect(luci.dispatcher.build_url("admin/docker/container/"..container_id.."/resources")) + end + end + +elseif action == "file" then + m.submit = false + m.reset = false + s= m:section(SimpleSection) + s.template = "dockerman/container_file_manager" + s.container = container_id + m.redirect = nil +elseif action == "inspect" then + s = m:section(SimpleSection) + s.syslog = luci.jsonc.stringify(container_info, true) + s.title = translate("Container Inspect") + s.template = "dockerman/logs" + m.submit = false + m.reset = false +elseif action == "logs" then + local logs = "" + local query ={ + stdout = 1, + stderr = 1, + tail = 1000 + } + + s = m:section(SimpleSection) + + logs = dk.containers:logs({id = container_id, query = query}) + if logs.code == 200 then + s.syslog=logs.body + else + s.syslog="Get Logs ERROR\n"..logs.code..": "..logs.body + end + + s.title=translate("Container Logs") + s.template = "dockerman/logs" + m.submit = false + m.reset = false +elseif action == "console" then + m.submit = false + m.reset = false + local cmd_docker = luci.util.exec("command -v docker"):match("^.+docker") or nil + local cmd_ttyd = luci.util.exec("command -v ttyd"):match("^.+ttyd") or nil + + if cmd_docker and cmd_ttyd and container_info.State.Status == "running" then + local cmd = "/bin/sh" + local uid + + s = m:section(SimpleSection) + + o = s:option(Value, "command", translate("Command")) + o:value("/bin/sh", "/bin/sh") + o:value("/bin/ash", "/bin/ash") + o:value("/bin/bash", "/bin/bash") + o.default = "/bin/sh" + o.forcewrite = true + o.write = function(self, section, value) + cmd = value + end + + o = s:option(Value, "uid", translate("UID")) + o.forcewrite = true + o.write = function(self, section, value) + uid = value + end + + o = s:option(Button, "connect") + o.render = function(self, section, scope) + self.inputstyle = "add" + self.title = " " + self.inputtitle = translate("Connect") + Button.render(self, section, scope) + end + o.write = function(self, section) + local cmd_docker = luci.util.exec("command -v docker"):match("^.+docker") or nil + local cmd_ttyd = luci.util.exec("command -v ttyd"):match("^.+ttyd") or nil + + if not cmd_docker or not cmd_ttyd or cmd_docker:match("^%s+$") or cmd_ttyd:match("^%s+$") then + return + end + local uci = (require "luci.model.uci").cursor() + + local ttyd_ssl = uci:get("ttyd", "@ttyd[0]", "ssl") + local ttyd_ssl_key = uci:get("ttyd", "@ttyd[0]", "ssl_key") + local ttyd_ssl_cert = uci:get("ttyd", "@ttyd[0]", "ssl_cert") + + if ttyd_ssl == "1" and ttyd_ssl_cert and ttyd_ssl_key then + cmd_ttyd = string.format('%s -S -C %s -K %s', cmd_ttyd, ttyd_ssl_cert, ttyd_ssl_key) + end + + local pid = luci.util.trim(luci.util.exec("netstat -lnpt | grep :7682 | grep ttyd | tr -s ' ' | cut -d ' ' -f7 | cut -d'/' -f1")) + if pid and pid ~= "" then + luci.util.exec("kill -9 " .. pid) + end + + local hosts + local remote = uci:get_bool("dockerd", "dockerman", "remote_endpoint") or false + local host = nil + local port = nil + local socket = nil + + if remote then + host = uci:get("dockerd", "dockerman", "remote_host") or nil + port = uci:get("dockerd", "dockerman", "remote_port") or nil + else + socket = uci:get("dockerd", "dockerman", "socket_path") or "/var/run/docker.sock" + end + + if remote and host and port then + hosts = "tcp://" .. host .. ':'.. port + elseif socket then + hosts = "unix://" .. socket + else + return + end + + if uid and uid ~= "" then + uid = "-u " .. uid + else + uid = "" + end + + local start_cmd = string.format('%s -d 2 --once -p 7682 %s -H "%s" exec -it %s %s %s&', cmd_ttyd, cmd_docker, hosts, uid, container_id, cmd) + + os.execute(start_cmd) + + o = s:option(DummyValue, "console") + o.container_id = container_id + o.template = "dockerman/container_console" + end + end +elseif action == "stats" then + local response = dk.containers:top({id = container_id, query = {ps_args="-aux"}}) + local container_top + + if response.code == 200 then + container_top=response.body + else + response = dk.containers:top({id = container_id}) + if response.code == 200 then + container_top=response.body + end + end + + if type(container_top) == "table" then + s = m:section(SimpleSection) + s.container_id = container_id + s.template = "dockerman/container_stats" + table_stats = { + cpu={ + key=translate("CPU Useage"), + value='-' + }, + memory={ + key=translate("Memory Useage"), + value='-' + } + } + + container_top = response.body + s = m:section(Table, table_stats, translate("Stats")) + s:option(DummyValue, "key", translate("Stats")).width="33%" + s:option(DummyValue, "value") + top_section = m:section(Table, container_top.Processes, translate("TOP")) + for i, v in ipairs(container_top.Titles) do + top_section:option(DummyValue, i, translate(v)) + end + end + + m.submit = false + m.reset = false +end + +return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua new file mode 100755 index 000000000..47f634f8b --- /dev/null +++ b/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua @@ -0,0 +1,284 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +local http = require "luci.http" +local docker = require "luci.model.docker" + +local m, s, o +local images, networks, containers, res, lost_state +local urlencode = luci.http.protocol and luci.http.protocol.urlencode or luci.util.urlencode +local dk = docker.new() + +if dk:_ping().code ~= 200 then + lost_state = true +else + res = dk.images:list() + if res and res.code and res.code < 300 then + images = res.body + end + + res = dk.networks:list() + if res and res.code and res.code < 300 then + networks = res.body + end + + res = dk.containers:list({ + query = { + all = true + } + }) + if res and res.code and res.code < 300 then + containers = res.body + end +end + +function get_containers() + local data = {} + if type(containers) ~= "table" then + return nil + end + + for i, v in ipairs(containers) do + local index = (10^12 - v.Created) .. "_id_" .. v.Id + + data[index]={} + data[index]["_selected"] = 0 + data[index]["_id"] = v.Id:sub(1,12) + -- data[index]["name"] = v.Names[1]:sub(2) + data[index]["_status"] = v.Status + + if v.Status:find("^Up") then + data[index]["_name"] = ""..v.Names[1]:sub(2).."" + data[index]["_status"] = "".. data[index]["_status"] .. "" .. "


" + else + data[index]["_name"] = ""..v.Names[1]:sub(2).."" + data[index]["_status"] = ''.. data[index]["_status"] .. "" + end + + if (type(v.NetworkSettings) == "table" and type(v.NetworkSettings.Networks) == "table") then + for networkname, netconfig in pairs(v.NetworkSettings.Networks) do + data[index]["_network"] = (data[index]["_network"] ~= nil and (data[index]["_network"] .." | ") or "").. networkname .. (netconfig.IPAddress ~= "" and (": " .. netconfig.IPAddress) or "") + end + end + + -- networkmode = v.HostConfig.NetworkMode ~= "default" and v.HostConfig.NetworkMode or "bridge" + -- data[index]["_network"] = v.NetworkSettings.Networks[networkmode].IPAddress or nil + -- local _, _, image = v.Image:find("^sha256:(.+)") + -- if image ~= nil then + -- image=image:sub(1,12) + -- end + + if v.Ports and next(v.Ports) ~= nil then + data[index]["_ports"] = nil + local ip = require "luci.ip" + for _,v2 in ipairs(v.Ports) do + -- display ipv4 only + if ip.new(v2.IP or "0.0.0.0"):is4() then + data[index]["_ports"] = (data[index]["_ports"] and (data[index]["_ports"] .. ", ") or "") + .. ((v2.PublicPort and v2.Type and v2.Type == "tcp") and ('') or "") + .. (v2.PublicPort and (v2.PublicPort .. ":") or "") .. (v2.PrivatePort and (v2.PrivatePort .."/") or "") .. (v2.Type and v2.Type or "") + .. ((v2.PublicPort and v2.Type and v2.Type == "tcp")and "" or "") + end + end + end + + for ii,iv in ipairs(images) do + if iv.Id == v.ImageID then + data[index]["_image"] = iv.RepoTags and iv.RepoTags[1] or (iv.RepoDigests[1]:gsub("(.-)@.+", "%1") .. ":<none>") + end + end + data[index]["_id_name"] = ''.. data[index]["_name"] .. "
ID: " .. data[index]["_id"] + .. "

Image: " .. (data[index]["_image"] or "<none>") + .. "
" + + if type(v.Mounts) == "table" and next(v.Mounts) then + for _, v2 in pairs(v.Mounts) do + if v2.Type ~= "volume" then + local v_sorce_d, v_dest_d + local v_sorce = "" + local v_dest = "" + for v_sorce_d in v2["Source"]:gmatch('[^/]+') do + if v_sorce_d and #v_sorce_d > 12 then + v_sorce = v_sorce .. "/" .. v_sorce_d:sub(1,8) .. ".." + else + v_sorce = v_sorce .."/".. v_sorce_d + end + end + for v_dest_d in v2["Destination"]:gmatch('[^/]+') do + if v_dest_d and #v_dest_d > 12 then + v_dest = v_dest .. "/" .. v_dest_d:sub(1,8) .. ".." + else + v_dest = v_dest .."/".. v_dest_d + end + end + data[index]["_mounts"] = (data[index]["_mounts"] and (data[index]["_mounts"] .. "
") or "") .. '' .. v_sorce .. "→" .. v_dest..'' + end + end + end + + data[index]["_image_id"] = v.ImageID:sub(8,20) + data[index]["_command"] = v.Command + end + return data +end + +local container_list = not lost_state and get_containers() or {} + +m = SimpleForm("docker", + translate("Docker - Containers"), + translate("This page displays all containers that have been created on the connected docker host.")) +m.submit=false +m.reset=false +m:append(Template("dockerman/containers_running_stats")) + +s = m:section(SimpleSection) +s.template = "dockerman/apply_widget" +s.err=docker:read_status() +s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") +if s.err then + docker:clear_status() +end + +s = m:section(Table, container_list, translate("Containers")) +s.nodescr=true +s.config="containers" + +o = s:option(Flag, "_selected","") +o.disabled = 0 +o.enabled = 1 +o.default = 0 +o.width = "1%" +o.write=function(self, section, value) + container_list[section]._selected = value +end + +-- o = s:option(DummyValue, "_id", translate("ID")) +-- o.width="10%" + +-- o = s:option(DummyValue, "_name", translate("Container Name")) +-- o.rawhtml = true + +o = s:option(DummyValue, "_id_name", translate("Container Info")) +o.rawhtml = true +o.width="15%" + +o = s:option(DummyValue, "_status", translate("Status")) +o.width="15%" +o.rawhtml=true + +o = s:option(DummyValue, "_network", translate("Network")) +o.width="10%" + +o = s:option(DummyValue, "_ports", translate("Ports")) +o.width="5%" +o.rawhtml = true +o = s:option(DummyValue, "_mounts", translate("Mounts")) +o.width="25%" +o.rawhtml = true + +-- o = s:option(DummyValue, "_image", translate("Image")) +-- o.width="8%" + +o = s:option(DummyValue, "_command", translate("Command")) +o.width="15%" + +local start_stop_remove = function(m, cmd) + local container_selected = {} + -- 遍历table中sectionid + for k in pairs(container_list) do + -- 得到选中项的名字 + if container_list[k]._selected == 1 then + container_selected[#container_selected + 1] = container_list[k]["_id"] + end + end + if #container_selected > 0 then + local success = true + + docker:clear_status() + for _, cont in ipairs(container_selected) do + docker:append_status("Containers: " .. cmd .. " " .. cont .. "...") + local res = dk.containers[cmd](dk, {id = cont}) + if res and res.code and res.code >= 300 then + success = false + docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message).. "\n") + else + docker:append_status("done\n") + end + end + + if success then + docker:clear_status() + end + + luci.http.redirect(luci.dispatcher.build_url("admin/docker/containers")) + end +end + +s = m:section(Table,{{}}) +s.notitle=true +s.rowcolors=false +s.template="cbi/nullsection" + +o = s:option(Button, "_new") +o.inputtitle = translate("Add") +o.template = "dockerman/cbi/inlinebutton" +o.inputstyle = "add" +o.forcewrite = true +o.write = function(self, section) + luci.http.redirect(luci.dispatcher.build_url("admin/docker/newcontainer")) +end +o.disable = lost_state + +o = s:option(Button, "_start") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle = translate("Start") +o.inputstyle = "apply" +o.forcewrite = true +o.write = function(self, section) + start_stop_remove(m,"start") +end +o.disable = lost_state + +o = s:option(Button, "_restart") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle = translate("Restart") +o.inputstyle = "reload" +o.forcewrite = true +o.write = function(self, section) + start_stop_remove(m,"restart") +end +o.disable = lost_state + +o = s:option(Button, "_stop") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle = translate("Stop") +o.inputstyle = "reset" +o.forcewrite = true +o.write = function(self, section) + start_stop_remove(m,"stop") +end +o.disable = lost_state + +o = s:option(Button, "_kill") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle = translate("Kill") +o.inputstyle = "reset" +o.forcewrite = true +o.write = function(self, section) + start_stop_remove(m,"kill") +end +o.disable = lost_state + +o = s:option(Button, "_remove") +o.template = "dockerman/cbi/inlinebutton" +o.inputtitle = translate("Remove") +o.inputstyle = "remove" +o.forcewrite = true +o.write = function(self, section) + start_stop_remove(m, "remove") +end +o.disable = lost_state + +return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua new file mode 100755 index 000000000..c3d3eab0d --- /dev/null +++ b/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua @@ -0,0 +1,284 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +local docker = require "luci.model.docker" +local dk = docker.new() + +local containers, images, res, lost_state +local m, s, o + +if dk:_ping().code ~= 200 then + lost_state = true +else + res = dk.images:list() + if res and res.code and res.code < 300 then + images = res.body + end + + res = dk.containers:list({ query = { all = true } }) + if res and res.code and res.code < 300 then + containers = res.body + end +end + +function get_images() + local data = {} + + for i, v in ipairs(images) do + local index = v.Created .. v.Id + + data[index]={} + data[index]["_selected"] = 0 + data[index]["id"] = v.Id:sub(8) + data[index]["_id"] = '' .. v.Id:sub(8,20) .. '' + + if v.RepoTags and next(v.RepoTags)~=nil then + for i, v1 in ipairs(v.RepoTags) do + data[index]["_tags"] =(data[index]["_tags"] and ( data[index]["_tags"] .. "
" )or "") .. ((v1:match("") or (#v.RepoTags == 1)) and v1 or ('' .. v1 .. '')) + + if not data[index]["tag"] then + data[index]["tag"] = v1 + end + end + else + data[index]["_tags"] = v.RepoDigests[1] and v.RepoDigests[1]:match("^(.-)@.+") + data[index]["_tags"] = (data[index]["_tags"] and data[index]["_tags"] or "" ).. ":" + end + + data[index]["_tags"] = data[index]["_tags"]:gsub("","<none>") + for ci,cv in ipairs(containers) do + if v.Id == cv.ImageID then + data[index]["_containers"] = (data[index]["_containers"] and (data[index]["_containers"] .. " | ") or "").. + ''.. cv.Names[1]:sub(2).."" + end + end + + data[index]["_size"] = string.format("%.2f", tostring(v.Size/1024/1024)).."MB" + data[index]["_created"] = os.date("%Y/%m/%d %H:%M:%S",v.Created) + end + + return data +end + +local image_list = not lost_state and get_images() or {} + +m = SimpleForm("docker", + translate("Docker - Images"), + translate("On this page all images are displayed that are available on the system and with which a container can be created.")) +m.submit=false +m.reset=false + +local pull_value={ + _image_tag_name="", + _registry="index.docker.io" +} + +s = m:section(SimpleSection, + translate("Pull Image"), + translate("By entering a valid image name with the corresponding version, the docker image can be downloaded from the configured registry.")) +s.template="cbi/nullsection" + +o = s:option(Value, "_image_tag_name") +o.template = "dockerman/cbi/inlinevalue" +o.placeholder="lisaac/luci:latest" +o.write = function(self, section, value) + local hastag = value:find(":") + + if not hastag then + value = value .. ":latest" + end + pull_value["_image_tag_name"] = value +end + +o = s:option(Button, "_pull") +o.inputtitle= translate("Pull") +o.template = "dockerman/cbi/inlinebutton" +o.inputstyle = "add" +o.disable = lost_state +o.write = function(self, section) + local tag = pull_value["_image_tag_name"] + local json_stringify = luci.jsonc and luci.jsonc.stringify + + if tag and tag ~= "" then + docker:write_status("Images: " .. "pulling" .. " " .. tag .. "...\n") + local res = dk.images:create({query = {fromImage=tag}}, docker.pull_image_show_status_cb) + + if res and res.code and res.code == 200 and (res.body[#res.body] and not res.body[#res.body].error and res.body[#res.body].status and (res.body[#res.body].status == "Status: Downloaded newer image for ".. tag)) then + docker:clear_status() + else + docker:append_status("code:" .. res.code.." ".. (res.body[#res.body] and res.body[#res.body].error or (res.body.message or res.message)).. "\n") + end + else + docker:append_status("code: 400 please input the name of image name!") + end + + luci.http.redirect(luci.dispatcher.build_url("admin/docker/images")) +end + +s = m:section(SimpleSection, + translate("Import Image"), + translate("When pressing the Import button, both a local image can be loaded onto the system and a valid image tar can be downloaded from remote.")) + +o = s:option(DummyValue, "_image_import") +o.template = "dockerman/images_import" +o.disable = lost_state + +s = m:section(Table, image_list, translate("Images overview")) + +o = s:option(Flag, "_selected","") +o.disabled = 0 +o.enabled = 1 +o.default = 0 +o.write = function(self, section, value) + image_list[section]._selected = value +end + +o = s:option(DummyValue, "_id", translate("ID")) +o.rawhtml = true + +o = s:option(DummyValue, "_tags", translate("RepoTags")) +o.rawhtml = true + +o = s:option(DummyValue, "_containers", translate("Containers")) +o.rawhtml = true + +o = s:option(DummyValue, "_size", translate("Size")) + +o = s:option(DummyValue, "_created", translate("Created")) + +local remove_action = function(force) + local image_selected = {} + + for k in pairs(image_list) do + if image_list[k]._selected == 1 then + image_selected[#image_selected+1] = (image_list[k]["_tags"]:match("
") or image_list[k]["_tags"]:match("<none>")) and image_list[k].id or image_list[k].tag + end + end + + if next(image_selected) ~= nil then + local success = true + + docker:clear_status() + for _, img in ipairs(image_selected) do + local query + docker:append_status("Images: " .. "remove" .. " " .. img .. "...") + + if force then + query = {force = true} + end + + local msg = dk.images:remove({ + id = img, + query = query + }) + if msg and msg.code ~= 200 then + docker:append_status("code:" .. msg.code.." ".. (msg.body.message and msg.body.message or msg.message).. "\n") + success = false + else + docker:append_status("done\n") + end + end + + if success then + docker:clear_status() + end + + luci.http.redirect(luci.dispatcher.build_url("admin/docker/images")) + end +end + +s = m:section(SimpleSection) +s.template = "dockerman/apply_widget" +s.err = docker:read_status() +s.err = s.err and s.err:gsub("\n","
"):gsub(" "," ") +if s.err then + docker:clear_status() +end + +s = m:section(Table,{{}}) +s.notitle=true +s.rowcolors=false +s.template="cbi/nullsection" + +o = s:option(Button, "remove") +o.inputtitle= translate("Remove") +o.template = "dockerman/cbi/inlinebutton" +o.inputstyle = "remove" +o.forcewrite = true +o.write = function(self, section) + remove_action() +end +o.disable = lost_state + +o = s:option(Button, "forceremove") +o.inputtitle= translate("Force Remove") +o.template = "dockerman/cbi/inlinebutton" +o.inputstyle = "remove" +o.forcewrite = true +o.write = function(self, section) + remove_action(true) +end +o.disable = lost_state + +o = s:option(Button, "save") +o.inputtitle= translate("Save") +o.template = "dockerman/cbi/inlinebutton" +o.inputstyle = "edit" +o.disable = lost_state +o.forcewrite = true +o.write = function (self, section) + local image_selected = {} + + for k in pairs(image_list) do + if image_list[k]._selected == 1 then + image_selected[#image_selected + 1] = image_list[k].id + end + end + + if next(image_selected) ~= nil then + local names, first, show_name + + for _, img in ipairs(image_selected) do + names = names and (names .. "&names=".. img) or img + end + if #image_selected > 1 then + show_name = "images" + else + show_name = image_selected[1] + end + local cb = function(res, chunk) + if res and res.code and res.code == 200 then + if not first then + first = true + luci.http.header('Content-Disposition', 'inline; filename="'.. show_name .. '.tar"') + luci.http.header('Content-Type', 'application\/x-tar') + end + luci.ltn12.pump.all(chunk, luci.http.write) + else + if not first then + first = true + luci.http.prepare_content("text/plain") + end + luci.ltn12.pump.all(chunk, luci.http.write) + end + end + + docker:write_status("Images: " .. "save" .. " " .. table.concat(image_selected, "\n") .. "...") + local msg = dk.images:get({query = {names = names}}, cb) + if msg and msg.code and msg.code ~= 200 then + docker:append_status("code:" .. msg.code.." ".. (msg.body.message and msg.body.message or msg.message).. "\n") + else + docker:clear_status() + end + end +end + +o = s:option(Button, "load") +o.inputtitle= translate("Load") +o.template = "dockerman/images_load" +o.inputstyle = "add" +o.disable = lost_state + +return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua new file mode 100755 index 000000000..37702c783 --- /dev/null +++ b/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua @@ -0,0 +1,159 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +local docker = require "luci.model.docker" + +local m, s, o +local networks, dk, res, lost_state + +dk = docker.new() + +if dk:_ping().code ~= 200 then + lost_state = true +else + res = dk.networks:list() + if res and res.code and res.code < 300 then + networks = res.body + end +end + +local get_networks = function () + local data = {} + + if type(networks) ~= "table" then + return nil + end + + for i, v in ipairs(networks) do + local index = v.Created .. v.Id + + data[index]={} + data[index]["_selected"] = 0 + data[index]["_id"] = v.Id:sub(1,12) + data[index]["_name"] = v.Name + data[index]["_driver"] = v.Driver + + if v.Driver == "bridge" then + data[index]["_interface"] = v.Options["com.docker.network.bridge.name"] + elseif v.Driver == "macvlan" then + data[index]["_interface"] = v.Options.parent + end + + data[index]["_subnet"] = v.IPAM and v.IPAM.Config[1] and v.IPAM.Config[1].Subnet or nil + data[index]["_gateway"] = v.IPAM and v.IPAM.Config[1] and v.IPAM.Config[1].Gateway or nil + end + + return data +end + +local network_list = not lost_state and get_networks() or {} + +m = SimpleForm("docker", + translate("Docker - Networks"), + translate("This page displays all docker networks that have been created on the connected docker host.")) +m.submit=false +m.reset=false + +s = m:section(Table, network_list, translate("Networks overview")) +s.nodescr=true + +o = s:option(Flag, "_selected","") +o.template = "dockerman/cbi/xfvalue" +o.disabled = 0 +o.enabled = 1 +o.default = 0 +o.render = function(self, section, scope) + self.disable = 0 + if network_list[section]["_name"] == "bridge" or network_list[section]["_name"] == "none" or network_list[section]["_name"] == "host" then + self.disable = 1 + end + Flag.render(self, section, scope) +end +o.write = function(self, section, value) + network_list[section]._selected = value +end + +o = s:option(DummyValue, "_id", translate("ID")) + +o = s:option(DummyValue, "_name", translate("Network Name")) + +o = s:option(DummyValue, "_driver", translate("Driver")) + +o = s:option(DummyValue, "_interface", translate("Parent Interface")) + +o = s:option(DummyValue, "_subnet", translate("Subnet")) + +o = s:option(DummyValue, "_gateway", translate("Gateway")) + +s = m:section(SimpleSection) +s.template = "dockerman/apply_widget" +s.err = docker:read_status() +s.err = s.err and s.err:gsub("\n","
"):gsub(" "," ") +if s.err then + docker:clear_status() +end + +s = m:section(Table,{{}}) +s.notitle=true +s.rowcolors=false +s.template="cbi/nullsection" + +o = s:option(Button, "_new") +o.inputtitle= translate("New") +o.template = "dockerman/cbi/inlinebutton" +o.notitle=true +o.inputstyle = "add" +o.forcewrite = true +o.disable = lost_state +o.write = function(self, section) + luci.http.redirect(luci.dispatcher.build_url("admin/docker/newnetwork")) +end + +o = s:option(Button, "_remove") +o.inputtitle= translate("Remove") +o.template = "dockerman/cbi/inlinebutton" +o.inputstyle = "remove" +o.forcewrite = true +o.disable = lost_state +o.write = function(self, section) + local network_selected = {} + local network_name_selected = {} + local network_driver_selected = {} + + for k in pairs(network_list) do + if network_list[k]._selected == 1 then + network_selected[#network_selected + 1] = network_list[k]._id + network_name_selected[#network_name_selected + 1] = network_list[k]._name + network_driver_selected[#network_driver_selected + 1] = network_list[k]._driver + end + end + + if next(network_selected) ~= nil then + local success = true + docker:clear_status() + + for ii, net in ipairs(network_selected) do + docker:append_status("Networks: " .. "remove" .. " " .. net .. "...") + local res = dk.networks["remove"](dk, {id = net}) + + if res and res.code and res.code >= 300 then + docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message).. "\n") + success = false + else + docker:append_status("done\n") + if network_driver_selected[ii] == "macvlan" then + docker.remove_macvlan_interface(network_name_selected[ii]) + end + end + end + + if success then + docker:clear_status() + end + luci.http.redirect(luci.dispatcher.build_url("admin/docker/networks")) + end +end + +return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua new file mode 100755 index 000000000..bfd1bf2a1 --- /dev/null +++ b/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua @@ -0,0 +1,923 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +local docker = require "luci.model.docker" + +local m, s, o + +local dk = docker.new() + +local cmd_line = table.concat(arg, '/') +local images, networks +local create_body = {} + +if dk:_ping().code ~= 200 then + lost_state = true + images = {} + networks = {} +else + images = dk.images:list().body + networks = dk.networks:list().body +end + +local is_quot_complete = function(str) + local num = 0, w + require "math" + + if not str then + return true + end + + local num = 0, w + for w in str:gmatch("\"") do + num = num + 1 + end + + if math.fmod(num, 2) ~= 0 then + return false + end + + num = 0 + for w in str:gmatch("\'") do + num = num + 1 + end + + if math.fmod(num, 2) ~= 0 then + return false + end + + return true +end + +function contains(list, x) + for _, v in pairs(list) do + if v == x then + return true + end + end + return false +end + +local resolve_cli = function(cmd_line) + local config = { + advance = 1 + } + + local key_no_val = { + 't', + 'd', + 'i', + 'tty', + 'rm', + 'read_only', + 'interactive', + 'init', + 'help', + 'detach', + 'privileged', + 'P', + 'publish_all', + } + + local key_with_val = { + 'sysctl', + 'add_host', + 'a', + 'attach', + 'blkio_weight_device', + 'cap_add', + 'cap_drop', + 'device', + 'device_cgroup_rule', + 'device_read_bps', + 'device_read_iops', + 'device_write_bps', + 'device_write_iops', + 'dns', + 'dns_option', + 'dns_search', + 'e', + 'env', + 'env_file', + 'expose', + 'group_add', + 'l', + 'label', + 'label_file', + 'link', + 'link_local_ip', + 'log_driver', + 'log_opt', + 'network_alias', + 'p', + 'publish', + 'security_opt', + 'storage_opt', + 'tmpfs', + 'v', + 'volume', + 'volumes_from', + 'blkio_weight', + 'cgroup_parent', + 'cidfile', + 'cpu_period', + 'cpu_quota', + 'cpu_rt_period', + 'cpu_rt_runtime', + 'c', + 'cpu_shares', + 'cpus', + 'cpuset_cpus', + 'cpuset_mems', + 'detach_keys', + 'disable_content_trust', + 'domainname', + 'entrypoint', + 'gpus', + 'health_cmd', + 'health_interval', + 'health_retries', + 'health_start_period', + 'health_timeout', + 'h', + 'hostname', + 'ip', + 'ip6', + 'ipc', + 'isolation', + 'kernel_memory', + 'mac_address', + 'm', + 'memory', + 'memory_reservation', + 'memory_swap', + 'memory_swappiness', + 'mount', + 'name', + 'network', + 'no_healthcheck', + 'oom_kill_disable', + 'oom_score_adj', + 'pid', + 'pids_limit', + 'restart', + 'runtime', + 'shm_size', + 'sig_proxy', + 'stop_signal', + 'stop_timeout', + 'ulimit', + 'u', + 'user', + 'userns', + 'uts', + 'volume_driver', + 'w', + 'workdir' + } + + local key_abb = { + net='network', + a='attach', + c='cpu-shares', + d='detach', + e='env', + h='hostname', + i='interactive', + l='label', + m='memory', + p='publish', + P='publish_all', + t='tty', + u='user', + v='volume', + w='workdir' + } + + local key_with_list = { + 'sysctl', + 'add_host', + 'a', + 'attach', + 'blkio_weight_device', + 'cap_add', + 'cap_drop', + 'device', + 'device_cgroup_rule', + 'device_read_bps', + 'device_read_iops', + 'device_write_bps', + 'device_write_iops', + 'dns', + 'dns_optiondns_search', + 'e', + 'env', + 'env_file', + 'expose', + 'group_add', + 'l', + 'label', + 'label_file', + 'link', + 'link_local_ip', + 'log_opt', + 'network_alias', + 'p', + 'publish', + 'security_opt', + 'storage_opt', + 'tmpfs', + 'v', + 'volume', + 'volumes_from', + } + + local key = nil + local _key = nil + local val = nil + local is_cmd = false + + cmd_line = cmd_line:match("^DOCKERCLI%s+(.+)") + for w in cmd_line:gmatch("[^%s]+") do + if w =='\\' then + elseif not key and not _key and not is_cmd then + --key=val + key, val = w:match("^%-%-([%lP%-]-)=(.+)") + if not key then + --key val + key = w:match("^%-%-([%lP%-]+)") + if not key then + -- -v val + key = w:match("^%-([%lP%-]+)") + if key then + -- for -dit + if key:match("i") or key:match("t") or key:match("d") then + if key:match("i") then + config[key_abb["i"]] = true + key:gsub("i", "") + end + if key:match("t") then + config[key_abb["t"]] = true + key:gsub("t", "") + end + if key:match("d") then + config[key_abb["d"]] = true + key:gsub("d", "") + end + if key:match("P") then + config[key_abb["P"]] = true + key:gsub("P", "") + end + if key == "" then + key = nil + end + end + end + end + end + if key then + key = key:gsub("-","_") + key = key_abb[key] or key + if contains(key_no_val, key) then + config[key] = true + val = nil + key = nil + elseif contains(key_with_val, key) then + -- if key == "cap_add" then config.privileged = true end + else + key = nil + val = nil + end + else + config.image = w + key = nil + val = nil + is_cmd = true + end + elseif (key or _key) and not is_cmd then + if key == "mount" then + -- we need resolve mount options here + -- type=bind,source=/source,target=/app + local _type = w:match("^type=([^,]+),") or "bind" + local source = (_type ~= "tmpfs") and (w:match("source=([^,]+),") or w:match("src=([^,]+),")) or "" + local target = w:match(",target=([^,]+)") or w:match(",dst=([^,]+)") or w:match(",destination=([^,]+)") or "" + local ro = w:match(",readonly") and "ro" or nil + + if source and target then + if _type ~= "tmpfs" then + local bind_propagation = (_type == "bind") and w:match(",bind%-propagation=([^,]+)") or nil + val = source..":"..target .. ((ro or bind_propagation) and (":" .. (ro and ro or "") .. (((ro and bind_propagation) and "," or "") .. (bind_propagation and bind_propagation or ""))or "")) + else + local tmpfs_mode = w:match(",tmpfs%-mode=([^,]+)") or nil + local tmpfs_size = w:match(",tmpfs%-size=([^,]+)") or nil + key = "tmpfs" + val = target .. ((tmpfs_mode or tmpfs_size) and (":" .. (tmpfs_mode and ("mode=" .. tmpfs_mode) or "") .. ((tmpfs_mode and tmpfs_size) and "," or "") .. (tmpfs_size and ("size=".. tmpfs_size) or "")) or "") + if not config[key] then + config[key] = {} + end + table.insert( config[key], val ) + key = nil + val = nil + end + end + else + val = w + end + elseif is_cmd then + config["command"] = (config["command"] and (config["command"] .. " " )or "") .. w + end + if (key or _key) and val then + key = _key or key + if contains(key_with_list, key) then + if not config[key] then + config[key] = {} + end + if _key then + config[key][#config[key]] = config[key][#config[key]] .. " " .. w + else + table.insert( config[key], val ) + end + if is_quot_complete(config[key][#config[key]]) then + config[key][#config[key]] = config[key][#config[key]]:gsub("[\"\']", "") + _key = nil + else + _key = key + end + else + config[key] = (config[key] and (config[key] .. " ") or "") .. val + if is_quot_complete(config[key]) then + config[key] = config[key]:gsub("[\"\']", "") + _key = nil + else + _key = key + end + end + key = nil + val = nil + end + end + + return config +end + +local default_config = {} + +if cmd_line and cmd_line:match("^DOCKERCLI.+") then + default_config = resolve_cli(cmd_line) +elseif cmd_line and cmd_line:match("^duplicate/[^/]+$") then + local container_id = cmd_line:match("^duplicate/(.+)") + create_body = dk:containers_duplicate_config({id = container_id}) or {} + if not create_body.HostConfig then + create_body.HostConfig = {} + end + + if next(create_body) ~= nil then + default_config.name = nil + default_config.image = create_body.Image + default_config.hostname = create_body.Hostname + default_config.tty = create_body.Tty and true or false + default_config.interactive = create_body.OpenStdin and true or false + default_config.privileged = create_body.HostConfig.Privileged and true or false + default_config.restart = create_body.HostConfig.RestartPolicy and create_body.HostConfig.RestartPolicy.name or nil + -- default_config.network = create_body.HostConfig.NetworkMode == "default" and "bridge" or create_body.HostConfig.NetworkMode + -- if container has leave original network, and add new network, .HostConfig.NetworkMode is INcorrect, so using first child of .NetworkingConfig.EndpointsConfig + default_config.network = create_body.NetworkingConfig and create_body.NetworkingConfig.EndpointsConfig and next(create_body.NetworkingConfig.EndpointsConfig) or nil + default_config.ip = default_config.network and default_config.network ~= "bridge" and default_config.network ~= "host" and default_config.network ~= "null" and create_body.NetworkingConfig.EndpointsConfig[default_config.network].IPAMConfig and create_body.NetworkingConfig.EndpointsConfig[default_config.network].IPAMConfig.IPv4Address or nil + default_config.link = create_body.HostConfig.Links + default_config.env = create_body.Env + default_config.dns = create_body.HostConfig.Dns + default_config.volume = create_body.HostConfig.Binds + default_config.cap_add = create_body.HostConfig.CapAdd + default_config.publish_all = create_body.HostConfig.PublishAllPorts + + if create_body.HostConfig.Sysctls and type(create_body.HostConfig.Sysctls) == "table" then + default_config.sysctl = {} + for k, v in pairs(create_body.HostConfig.Sysctls) do + table.insert( default_config.sysctl, k.."="..v ) + end + end + if create_body.HostConfig.LogConfig then + if create_body.HostConfig.LogConfig.Config and type(create_body.HostConfig.LogConfig.Config) == "table" then + default_config.log_opt = {} + for k, v in pairs(create_body.HostConfig.LogConfig.Config) do + table.insert( default_config.log_opt, k.."="..v ) + end + end + default_config.log_driver = create_body.HostConfig.LogConfig.Type or nil + end + + if create_body.HostConfig.PortBindings and type(create_body.HostConfig.PortBindings) == "table" then + default_config.publish = {} + for k, v in pairs(create_body.HostConfig.PortBindings) do + for x, y in ipairs(v) do + table.insert( default_config.publish, y.HostPort..":"..k:match("^(%d+)/.+").."/"..k:match("^%d+/(.+)") ) + end + end + end + + default_config.user = create_body.User or nil + default_config.command = create_body.Cmd and type(create_body.Cmd) == "table" and table.concat(create_body.Cmd, " ") or nil + default_config.advance = 1 + default_config.cpus = create_body.HostConfig.NanoCPUs + default_config.cpu_shares = create_body.HostConfig.CpuShares + default_config.memory = create_body.HostConfig.Memory + default_config.blkio_weight = create_body.HostConfig.BlkioWeight + + if create_body.HostConfig.Devices and type(create_body.HostConfig.Devices) == "table" then + default_config.device = {} + for _, v in ipairs(create_body.HostConfig.Devices) do + table.insert( default_config.device, v.PathOnHost..":"..v.PathInContainer..(v.CgroupPermissions ~= "" and (":" .. v.CgroupPermissions) or "") ) + end + end + + if create_body.HostConfig.Tmpfs and type(create_body.HostConfig.Tmpfs) == "table" then + default_config.tmpfs = {} + for k, v in pairs(create_body.HostConfig.Tmpfs) do + table.insert( default_config.tmpfs, k .. (v~="" and ":" or "")..v ) + end + end + end +end + +m = SimpleForm("docker", translate("Docker - Containers")) +m.redirect = luci.dispatcher.build_url("admin", "docker", "containers") +if lost_state then + m.submit=false + m.reset=false +end + +s = m:section(SimpleSection) +s.template = "dockerman/apply_widget" +s.err=docker:read_status() +s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") +if s.err then + docker:clear_status() +end + +s = m:section(SimpleSection, translate("Create new docker container")) +s.addremove = true +s.anonymous = true + +o = s:option(DummyValue,"cmd_line", translate("Resolve CLI")) +o.rawhtml = true +o.template = "dockerman/newcontainer_resolve" + +o = s:option(Value, "name", translate("Container Name")) +o.rmempty = true +o.default = default_config.name or nil + +o = s:option(Flag, "interactive", translate("Interactive (-i)")) +o.rmempty = true +o.disabled = 0 +o.enabled = 1 +o.default = default_config.interactive and 1 or 0 + +o = s:option(Flag, "tty", translate("TTY (-t)")) +o.rmempty = true +o.disabled = 0 +o.enabled = 1 +o.default = default_config.tty and 1 or 0 + +o = s:option(Value, "image", translate("Docker Image")) +o.rmempty = true +o.default = default_config.image or nil +for _, v in ipairs (images) do + if v.RepoTags then + o:value(v.RepoTags[1], v.RepoTags[1]) + end +end + +o = s:option(Flag, "_force_pull", translate("Always pull image first")) +o.rmempty = true +o.disabled = 0 +o.enabled = 1 +o.default = 0 + +o = s:option(Flag, "privileged", translate("Privileged")) +o.rmempty = true +o.disabled = 0 +o.enabled = 1 +o.default = default_config.privileged and 1 or 0 + +o = s:option(ListValue, "restart", translate("Restart Policy")) +o.rmempty = true +o:value("no", "No") +o:value("unless-stopped", "Unless stopped") +o:value("always", "Always") +o:value("on-failure", "On failure") +o.default = default_config.restart or "unless-stopped" + +local d_network = s:option(ListValue, "network", translate("Networks")) +d_network.rmempty = true +d_network.default = default_config.network or "bridge" + +local d_ip = s:option(Value, "ip", translate("IPv4 Address")) +d_ip.datatype="ip4addr" +d_ip:depends("network", "nil") +d_ip.default = default_config.ip or nil + +o = s:option(DynamicList, "link", translate("Links with other containers")) +o.placeholder = "container_name:alias" +o.rmempty = true +o:depends("network", "bridge") +o.default = default_config.link or nil + +o = s:option(DynamicList, "dns", translate("Set custom DNS servers")) +o.placeholder = "8.8.8.8" +o.rmempty = true +o.default = default_config.dns or nil + +o = s:option(Value, "user", + translate("User(-u)"), + translate("The user that commands are run as inside the container.(format: name|uid[:group|gid])")) +o.placeholder = "1000:1000" +o.rmempty = true +o.default = default_config.user or nil + +o = s:option(DynamicList, "env", + translate("Environmental Variable(-e)"), + translate("Set environment variables to inside the container")) +o.placeholder = "TZ=Asia/Shanghai" +o.rmempty = true +o.default = default_config.env or nil + +o = s:option(DynamicList, "volume", + translate("Bind Mount(-v)"), + translate("Bind mount a volume")) +o.placeholder = "/media:/media:slave" +o.rmempty = true +o.default = default_config.volume or nil + +local d_publish = s:option(DynamicList, "publish", + translate("Exposed Ports(-p)"), + translate("Publish container's port(s) to the host")) +d_publish.placeholder = "2200:22/tcp" +d_publish.rmempty = true +d_publish.default = default_config.publish or nil + +o = s:option(Value, "command", translate("Run command")) +o.placeholder = "/bin/sh init.sh" +o.rmempty = true +o.default = default_config.command or nil + +o = s:option(Flag, "advance", translate("Advance")) +o.rmempty = true +o.disabled = 0 +o.enabled = 1 +o.default = default_config.advance or 0 + +o = s:option(Value, "hostname", + translate("Host Name"), + translate("The hostname to use for the container")) +o.rmempty = true +o.default = default_config.hostname or nil +o:depends("advance", 1) + +o = s:option(Flag, "publish_all", + translate("Exposed All Ports(-P)"), + translate("Allocates an ephemeral host port for all of a container's exposed ports")) +o.rmempty = true +o.disabled = 0 +o.enabled = 1 +o.default = default_config.publish_all and 1 or 0 +o:depends("advance", 1) + +o = s:option(DynamicList, "device", + translate("Device(--device)"), + translate("Add host device to the container")) +o.placeholder = "/dev/sda:/dev/xvdc:rwm" +o.rmempty = true +o:depends("advance", 1) +o.default = default_config.device or nil + +o = s:option(DynamicList, "tmpfs", + translate("Tmpfs(--tmpfs)"), + translate("Mount tmpfs directory")) +o.placeholder = "/run:rw,noexec,nosuid,size=65536k" +o.rmempty = true +o:depends("advance", 1) +o.default = default_config.tmpfs or nil + +o = s:option(DynamicList, "sysctl", + translate("Sysctl(--sysctl)"), + translate("Sysctls (kernel parameters) options")) +o.placeholder = "net.ipv4.ip_forward=1" +o.rmempty = true +o:depends("advance", 1) +o.default = default_config.sysctl or nil + +o = s:option(DynamicList, "cap_add", + translate("CAP-ADD(--cap-add)"), + translate("A list of kernel capabilities to add to the container")) +o.placeholder = "NET_ADMIN" +o.rmempty = true +o:depends("advance", 1) +o.default = default_config.cap_add or nil + +o = s:option(Value, "cpus", + translate("CPUs"), + translate("Number of CPUs. Number is a fractional number. 0.000 means no limit")) +o.placeholder = "1.5" +o.rmempty = true +o:depends("advance", 1) +o.datatype="ufloat" +o.default = default_config.cpus or nil + +o = s:option(Value, "cpu_shares", + translate("CPU Shares Weight"), + translate("CPU shares relative weight, if 0 is set, the system will ignore the value and use the default of 1024")) +o.placeholder = "1024" +o.rmempty = true +o:depends("advance", 1) +o.datatype="uinteger" +o.default = default_config.cpu_shares or nil + +o = s:option(Value, "memory", + translate("Memory"), + translate("Memory limit (format: []). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M")) +o.placeholder = "128m" +o.rmempty = true +o:depends("advance", 1) +o.default = default_config.memory or nil + +o = s:option(Value, "blkio_weight", + translate("Block IO Weight"), + translate("Block IO weight (relative weight) accepts a weight value between 10 and 1000")) +o.placeholder = "500" +o.rmempty = true +o:depends("advance", 1) +o.datatype="uinteger" +o.default = default_config.blkio_weight or nil + +o = s:option(Value, "log_driver", + translate("Logging driver"), + translate("The logging driver for the container")) +o.placeholder = "json-file" +o.rmempty = true +o:depends("advance", 1) +o.default = default_config.log_driver or nil + +o = s:option(DynamicList, "log_opt", + translate("Log driver options"), + translate("The logging configuration for this container")) +o.placeholder = "max-size=1m" +o.rmempty = true +o:depends("advance", 1) +o.default = default_config.log_opt or nil + +for _, v in ipairs (networks) do + if v.Name then + local parent = v.Options and v.Options.parent or nil + local ip = v.IPAM and v.IPAM.Config and v.IPAM.Config[1] and v.IPAM.Config[1].Subnet or nil + ipv6 = v.IPAM and v.IPAM.Config and v.IPAM.Config[2] and v.IPAM.Config[2].Subnet or nil + local network_name = v.Name .. " | " .. v.Driver .. (parent and (" | " .. parent) or "") .. (ip and (" | " .. ip) or "").. (ipv6 and (" | " .. ipv6) or "") + d_network:value(v.Name, network_name) + + if v.Name ~= "none" and v.Name ~= "bridge" and v.Name ~= "host" then + d_ip:depends("network", v.Name) + end + + if v.Driver == "bridge" then + d_publish:depends("network", v.Name) + end + end +end + +m.handle = function(self, state, data) + if state ~= FORM_VALID then + return + end + + local tmp + local name = data.name or ("luci_" .. os.date("%Y%m%d%H%M%S")) + local hostname = data.hostname + local tty = type(data.tty) == "number" and (data.tty == 1 and true or false) or default_config.tty or false + local publish_all = type(data.publish_all) == "number" and (data.publish_all == 1 and true or false) or default_config.publish_all or false + local interactive = type(data.interactive) == "number" and (data.interactive == 1 and true or false) or default_config.interactive or false + local image = data.image + local user = data.user + + if image and not image:match(".-:.+") then + image = image .. ":latest" + end + + local privileged = type(data.privileged) == "number" and (data.privileged == 1 and true or false) or default_config.privileged or false + local restart = data.restart + local env = data.env + local dns = data.dns + local cap_add = data.cap_add + local sysctl = {} + local log_driver = data.log_driver + + tmp = data.sysctl + if type(tmp) == "table" then + for i, v in ipairs(tmp) do + local k,v1 = v:match("(.-)=(.+)") + if k and v1 then + sysctl[k]=v1 + end + end + end + + local log_opt = {} + tmp = data.log_opt + if type(tmp) == "table" then + for i, v in ipairs(tmp) do + local k,v1 = v:match("(.-)=(.+)") + if k and v1 then + log_opt[k]=v1 + end + end + end + + local network = data.network + local ip = (network ~= "bridge" and network ~= "host" and network ~= "none") and data.ip or nil + local volume = data.volume + local memory = data.memory or nil + local cpu_shares = data.cpu_shares or nil + local cpus = data.cpus or nil + local blkio_weight = data.blkio_weight or nil + + local portbindings = {} + local exposedports = {} + + local tmpfs = {} + tmp = data.tmpfs + if type(tmp) == "table" then + for i, v in ipairs(tmp)do + local k= v:match("([^:]+)") + local v1 = v:match(".-:([^:]+)") or "" + if k then + tmpfs[k]=v1 + end + end + end + + local device = {} + tmp = data.device + if type(tmp) == "table" then + for i, v in ipairs(tmp) do + local t = {} + local _,_, h, c, p = v:find("(.-):(.-):(.+)") + if h and c then + t['PathOnHost'] = h + t['PathInContainer'] = c + t['CgroupPermissions'] = p or "rwm" + else + local _,_, h, c = v:find("(.-):(.+)") + if h and c then + t['PathOnHost'] = h + t['PathInContainer'] = c + t['CgroupPermissions'] = "rwm" + else + t['PathOnHost'] = v + t['PathInContainer'] = v + t['CgroupPermissions'] = "rwm" + end + end + + if next(t) ~= nil then + table.insert( device, t ) + end + end + end + + tmp = data.publish or {} + for i, v in ipairs(tmp) do + for v1 ,v2 in string.gmatch(v, "(%d+):([^%s]+)") do + local _,_,p= v2:find("^%d+/(%w+)") + if p == nil then + v2=v2..'/tcp' + end + portbindings[v2] = {{HostPort=v1}} + exposedports[v2] = {HostPort=v1} + end + end + + local link = data.link + tmp = data.command + local command = {} + if tmp ~= nil then + for v in string.gmatch(tmp, "[^%s]+") do + command[#command+1] = v + end + end + + if memory and memory ~= 0 then + _,_,n,unit = memory:find("([%d%.]+)([%l%u]+)") + if n then + unit = unit and unit:sub(1,1):upper() or "B" + if unit == "M" then + memory = tonumber(n) * 1024 * 1024 + elseif unit == "G" then + memory = tonumber(n) * 1024 * 1024 * 1024 + elseif unit == "K" then + memory = tonumber(n) * 1024 + else + memory = tonumber(n) + end + end + end + + create_body.Hostname = network ~= "host" and (hostname or name) or nil + create_body.Tty = tty and true or false + create_body.OpenStdin = interactive and true or false + create_body.User = user + create_body.Cmd = command + create_body.Env = env + create_body.Image = image + create_body.ExposedPorts = exposedports + create_body.HostConfig = create_body.HostConfig or {} + create_body.HostConfig.Dns = dns + create_body.HostConfig.Binds = volume + create_body.HostConfig.RestartPolicy = { Name = restart, MaximumRetryCount = 0 } + create_body.HostConfig.Privileged = privileged and true or false + create_body.HostConfig.PortBindings = portbindings + create_body.HostConfig.Memory = memory and tonumber(memory) + create_body.HostConfig.CpuShares = cpu_shares and tonumber(cpu_shares) + create_body.HostConfig.NanoCPUs = cpus and tonumber(cpus) * 10 ^ 9 + create_body.HostConfig.BlkioWeight = blkio_weight and tonumber(blkio_weight) + create_body.HostConfig.PublishAllPorts = publish_all + + if create_body.HostConfig.NetworkMode ~= network then + create_body.NetworkingConfig = nil + end + + create_body.HostConfig.NetworkMode = network + + if ip then + if create_body.NetworkingConfig and create_body.NetworkingConfig.EndpointsConfig and type(create_body.NetworkingConfig.EndpointsConfig) == "table" then + for k, v in pairs (create_body.NetworkingConfig.EndpointsConfig) do + if k == network and v.IPAMConfig and v.IPAMConfig.IPv4Address then + v.IPAMConfig.IPv4Address = ip + else + create_body.NetworkingConfig.EndpointsConfig = { [network] = { IPAMConfig = { IPv4Address = ip } } } + end + break + end + else + create_body.NetworkingConfig = { EndpointsConfig = { [network] = { IPAMConfig = { IPv4Address = ip } } } } + end + elseif not create_body.NetworkingConfig then + create_body.NetworkingConfig = nil + end + + create_body["HostConfig"]["Tmpfs"] = tmpfs + create_body["HostConfig"]["Devices"] = device + create_body["HostConfig"]["Sysctls"] = sysctl + create_body["HostConfig"]["CapAdd"] = cap_add + create_body["HostConfig"]["LogConfig"] = { + Config = log_opt, + Type = log_driver + } + + if network == "bridge" then + create_body["HostConfig"]["Links"] = link + end + + local pull_image = function(image) + local json_stringify = luci.jsonc and luci.jsonc.stringify + docker:append_status("Images: " .. "pulling" .. " " .. image .. "...\n") + local res = dk.images:create({query = {fromImage=image}}, docker.pull_image_show_status_cb) + if res and res.code and res.code == 200 and (res.body[#res.body] and not res.body[#res.body].error and res.body[#res.body].status and (res.body[#res.body].status == "Status: Downloaded newer image for ".. image or res.body[#res.body].status == "Status: Image is up to date for ".. image)) then + docker:append_status("done\n") + else + res.code = (res.code == 200) and 500 or res.code + docker:append_status("code:" .. res.code.." ".. (res.body[#res.body] and res.body[#res.body].error or (res.body.message or res.message)).. "\n") + luci.http.redirect(luci.dispatcher.build_url("admin/docker/newcontainer")) + end + end + + docker:clear_status() + local exist_image = false + + if image then + for _, v in ipairs (images) do + if v.RepoTags and v.RepoTags[1] == image then + exist_image = true + break + end + end + if not exist_image then + pull_image(image) + elseif data._force_pull == 1 then + pull_image(image) + end + end + + create_body = docker.clear_empty_tables(create_body) + + docker:append_status("Container: " .. "create" .. " " .. name .. "...") + local res = dk.containers:create({name = name, body = create_body}) + if res and res.code and res.code == 201 then + docker:clear_status() + luci.http.redirect(luci.dispatcher.build_url("admin/docker/containers")) + else + docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message)) + luci.http.redirect(luci.dispatcher.build_url("admin/docker/newcontainer")) + end +end + +return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua new file mode 100755 index 000000000..c87678b85 --- /dev/null +++ b/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua @@ -0,0 +1,258 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +local docker = require "luci.model.docker" + +local m, s, o + +local dk = docker.new() +if dk:_ping().code ~= 200 then + lost_state = true +end + +m = SimpleForm("docker", translate("Docker - Network")) +m.redirect = luci.dispatcher.build_url("admin", "docker", "networks") +if lost_state then + m.submit=false + m.reset=false +end + + +s = m:section(SimpleSection) +s.template = "dockerman/apply_widget" +s.err=docker:read_status() +s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") +if s.err then + docker:clear_status() +end + +s = m:section(SimpleSection, translate("Create new docker network")) +s.addremove = true +s.anonymous = true + +o = s:option(Value, "name", + translate("Network Name"), + translate("Name of the network that can be selected during container creation")) +o.rmempty = true + +o = s:option(ListValue, "driver", translate("Driver")) +o.rmempty = true +o:value("bridge", translate("Bridge device")) +o:value("macvlan", translate("MAC VLAN")) +o:value("ipvlan", translate("IP VLAN")) +o:value("overlay", translate("Overlay network")) + +o = s:option(Value, "parent", translate("Base device")) +o.rmempty = true +o:depends("driver", "macvlan") +local interfaces = luci.sys and luci.sys.net and luci.sys.net.devices() or {} +for _, v in ipairs(interfaces) do + o:value(v, v) +end +o.default="br-lan" +o.placeholder="br-lan" + +o = s:option(ListValue, "macvlan_mode", translate("Mode")) +o.rmempty = true +o:depends("driver", "macvlan") +o.default="bridge" +o:value("bridge", translate("Bridge (Support direct communication between MAC VLANs)")) +o:value("private", translate("Private (Prevent communication between MAC VLANs)")) +o:value("vepa", translate("VEPA (Virtual Ethernet Port Aggregator)")) +o:value("passthru", translate("Pass-through (Mirror physical device to single MAC VLAN)")) + +o = s:option(ListValue, "ipvlan_mode", translate("Ipvlan Mode")) +o.rmempty = true +o:depends("driver", "ipvlan") +o.default="l3" +o:value("l2", translate("L2 bridge")) +o:value("l3", translate("L3 bridge")) + +o = s:option(Flag, "ingress", + translate("Ingress"), + translate("Ingress network is the network which provides the routing-mesh in swarm mode")) +o.rmempty = true +o.disabled = 0 +o.enabled = 1 +o.default = 0 +o:depends("driver", "overlay") + +o = s:option(DynamicList, "options", translate("Options")) +o.rmempty = true +o.placeholder="com.docker.network.driver.mtu=1500" + +o = s:option(Flag, "internal", translate("Internal"), translate("Restrict external access to the network")) +o.rmempty = true +o:depends("driver", "overlay") +o.disabled = 0 +o.enabled = 1 +o.default = 0 + +if nixio.fs.access("/etc/config/network") and nixio.fs.access("/etc/config/firewall")then + o = s:option(Flag, "op_macvlan", translate("Create macvlan interface"), translate("Auto create macvlan interface in Openwrt")) + o:depends("driver", "macvlan") + o.disabled = 0 + o.enabled = 1 + o.default = 1 +end + +o = s:option(Value, "subnet", translate("Subnet")) +o.rmempty = true +o.placeholder="10.1.0.0/16" +o.datatype="ip4addr" + +o = s:option(Value, "gateway", translate("Gateway")) +o.rmempty = true +o.placeholder="10.1.1.1" +o.datatype="ip4addr" + +o = s:option(Value, "ip_range", translate("IP range")) +o.rmempty = true +o.placeholder="10.1.1.0/24" +o.datatype="ip4addr" + +o = s:option(DynamicList, "aux_address", translate("Exclude IPs")) +o.rmempty = true +o.placeholder="my-route=10.1.1.1" + +o = s:option(Flag, "ipv6", translate("Enable IPv6")) +o.rmempty = true +o.disabled = 0 +o.enabled = 1 +o.default = 0 + +o = s:option(Value, "subnet6", translate("IPv6 Subnet")) +o.rmempty = true +o.placeholder="fe80::/10" +o.datatype="ip6addr" +o:depends("ipv6", 1) + +o = s:option(Value, "gateway6", translate("IPv6 Gateway")) +o.rmempty = true +o.placeholder="fe80::1" +o.datatype="ip6addr" +o:depends("ipv6", 1) + +m.handle = function(self, state, data) + if state == FORM_VALID then + local name = data.name + local driver = data.driver + + local internal = data.internal == 1 and true or false + + local subnet = data.subnet + local gateway = data.gateway + local ip_range = data.ip_range + + local aux_address = {} + local tmp = data.aux_address or {} + for i,v in ipairs(tmp) do + _,_,k1,v1 = v:find("(.-)=(.+)") + aux_address[k1] = v1 + end + + local options = {} + tmp = data.options or {} + for i,v in ipairs(tmp) do + _,_,k1,v1 = v:find("(.-)=(.+)") + options[k1] = v1 + end + + local ipv6 = data.ipv6 == 1 and true or false + + local create_body = { + Name = name, + Driver = driver, + EnableIPv6 = ipv6, + IPAM = { + Driver= "default" + }, + Internal = internal + } + + if subnet or gateway or ip_range then + create_body["IPAM"]["Config"] = { + { + Subnet = subnet, + Gateway = gateway, + IPRange = ip_range, + AuxAddress = aux_address, + AuxiliaryAddresses = aux_address + } + } + end + + if driver == "macvlan" then + create_body["Options"] = { + macvlan_mode = data.macvlan_mode, + parent = data.parent + } + elseif driver == "ipvlan" then + create_body["Options"] = { + ipvlan_mode = data.ipvlan_mode + } + elseif driver == "overlay" then + create_body["Ingress"] = data.ingerss == 1 and true or false + end + + if ipv6 and data.subnet6 and data.subnet6 then + if type(create_body["IPAM"]["Config"]) ~= "table" then + create_body["IPAM"]["Config"] = {} + end + local index = #create_body["IPAM"]["Config"] + create_body["IPAM"]["Config"][index+1] = { + Subnet = data.subnet6, + Gateway = data.gateway6 + } + end + + if next(options) ~= nil then + create_body["Options"] = create_body["Options"] or {} + for k, v in pairs(options) do + create_body["Options"][k] = v + end + end + + create_body = docker.clear_empty_tables(create_body) + docker:write_status("Network: " .. "create" .. " " .. create_body.Name .. "...") + + local res = dk.networks:create({ + body = create_body + }) + + if res and res.code == 201 then + docker:write_status("Network: " .. "create macvlan interface...") + res = dk.networks:inspect({ + name = create_body.Name + }) + + if driver == "macvlan" and + data.op_macvlan ~= 0 and + res and + res.code and + res.code == 200 and + res.body and + res.body.IPAM and + res.body.IPAM.Config and + res.body.IPAM.Config[1] and + res.body.IPAM.Config[1].Gateway and + res.body.IPAM.Config[1].Subnet then + + docker.create_macvlan_interface(data.name, + data.parent, + res.body.IPAM.Config[1].Gateway, + res.body.IPAM.Config[1].Subnet) + end + + docker:clear_status() + luci.http.redirect(luci.dispatcher.build_url("admin/docker/networks")) + else + docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message).. "\n") + luci.http.redirect(luci.dispatcher.build_url("admin/docker/newnetwork")) + end + end +end + +return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua new file mode 100755 index 000000000..c91f349ce --- /dev/null +++ b/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua @@ -0,0 +1,151 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +local docker = require "luci.model.docker" +local uci = (require "luci.model.uci").cursor() + +local m, s, o, lost_state +local dk = docker.new() + +if dk:_ping().code ~= 200 then + lost_state = true +end + +m = SimpleForm("dockerd", + translate("Docker - Overview"), + translate("An overview with the relevant data is displayed here with which the LuCI docker client is connected.") +.. + " " .. + [[]] .. + translate("Github") .. + [[]]) +m.submit=false +m.reset=false + +local docker_info_table = {} +-- docker_info_table['0OperatingSystem'] = {_key=translate("Operating System"),_value='-'} +-- docker_info_table['1Architecture'] = {_key=translate("Architecture"),_value='-'} +-- docker_info_table['2KernelVersion'] = {_key=translate("Kernel Version"),_value='-'} +docker_info_table['3ServerVersion'] = {_key=translate("Docker Version"),_value='-'} +docker_info_table['4ApiVersion'] = {_key=translate("Api Version"),_value='-'} +docker_info_table['5NCPU'] = {_key=translate("CPUs"),_value='-'} +docker_info_table['6MemTotal'] = {_key=translate("Total Memory"),_value='-'} +docker_info_table['7DockerRootDir'] = {_key=translate("Docker Root Dir"),_value='-'} +docker_info_table['8IndexServerAddress'] = {_key=translate("Index Server Address"),_value='-'} +docker_info_table['9RegistryMirrors'] = {_key=translate("Registry Mirrors"),_value='-'} + +if nixio.fs.access("/usr/bin/dockerd") and not uci:get_bool("dockerd", "dockerman", "remote_endpoint") then + s = m:section(SimpleSection) + s.template = "dockerman/apply_widget" + s.err=docker:read_status() + s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") + if s.err then + docker:clear_status() + end + s = m:section(Table,{{}}) + s.notitle=true + s.rowcolors=false + s.template = "cbi/nullsection" + + o = s:option(Button, "_start") + o.template = "dockerman/cbi/inlinebutton" + o.inputtitle = lost_state and translate("Start") or translate("Stop") + o.inputstyle = lost_state and "add" or "remove" + o.forcewrite = true + o.write = function(self, section) + docker:clear_status() + + if lost_state then + docker:append_status("Docker daemon: starting") + luci.util.exec("/etc/init.d/dockerd start") + luci.util.exec("sleep 5") + luci.util.exec("/etc/init.d/dockerman start") + + else + docker:append_status("Docker daemon: stopping") + luci.util.exec("/etc/init.d/dockerd stop") + end + docker:clear_status() + luci.http.redirect(luci.dispatcher.build_url("admin/docker/overview")) + end + + o = s:option(Button, "_restart") + o.template = "dockerman/cbi/inlinebutton" + o.inputtitle = translate("Restart") + o.inputstyle = "reload" + o.forcewrite = true + o.write = function(self, section) + docker:clear_status() + docker:append_status("Docker daemon: restarting") + luci.util.exec("/etc/init.d/dockerd restart") + luci.util.exec("sleep 5") + luci.util.exec("/etc/init.d/dockerman start") + docker:clear_status() + luci.http.redirect(luci.dispatcher.build_url("admin/docker/overview")) + end +end + +s = m:section(Table, docker_info_table) +s:option(DummyValue, "_key", translate("Info")) +s:option(DummyValue, "_value") + +s = m:section(SimpleSection) +s.template = "dockerman/overview" + +s.containers_running = '-' +s.images_used = '-' +s.containers_total = '-' +s.images_total = '-' +s.networks_total = '-' +s.volumes_total = '-' + +-- local socket = luci.model.uci.cursor():get("dockerd", "dockerman", "socket_path") +if not lost_state then + local containers_list = dk.containers:list({query = {all=true}}).body + local images_list = dk.images:list().body + local vol = dk.volumes:list() + local volumes_list = vol and vol.body and vol.body.Volumes or {} + local networks_list = dk.networks:list().body or {} + local docker_info = dk:info() + + -- docker_info_table['0OperatingSystem']._value = docker_info.body.OperatingSystem + -- docker_info_table['1Architecture']._value = docker_info.body.Architecture + -- docker_info_table['2KernelVersion']._value = docker_info.body.KernelVersion + docker_info_table['3ServerVersion']._value = docker_info.body.ServerVersion + docker_info_table['4ApiVersion']._value = docker_info.headers["Api-Version"] + docker_info_table['5NCPU']._value = tostring(docker_info.body.NCPU) + docker_info_table['6MemTotal']._value = docker.byte_format(docker_info.body.MemTotal) + if docker_info.body.DockerRootDir then + local statvfs = nixio.fs.statvfs(docker_info.body.DockerRootDir) + local size = statvfs and (statvfs.bavail * statvfs.bsize) or 0 + docker_info_table['7DockerRootDir']._value = docker_info.body.DockerRootDir .. " (" .. tostring(docker.byte_format(size)) .. " " .. translate("Available") .. ")" + end + + docker_info_table['8IndexServerAddress']._value = docker_info.body.IndexServerAddress + for i, v in ipairs(docker_info.body.RegistryConfig.Mirrors) do + docker_info_table['9RegistryMirrors']._value = docker_info_table['9RegistryMirrors']._value == "-" and v or (docker_info_table['9RegistryMirrors']._value .. ", " .. v) + end + + s.images_used = 0 + for i, v in ipairs(images_list) do + for ci,cv in ipairs(containers_list) do + if v.Id == cv.ImageID then + s.images_used = s.images_used + 1 + break + end + end + end + + s.containers_running = tostring(docker_info.body.ContainersRunning) + s.images_used = tostring(s.images_used) + s.containers_total = tostring(docker_info.body.Containers) + s.images_total = tostring(#images_list) + s.networks_total = tostring(#networks_list) + s.volumes_total = tostring(#volumes_list) +else + docker_info_table['3ServerVersion']._value = translate("Can NOT connect to docker daemon, please check!!") +end + +return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua new file mode 100755 index 000000000..43e6bda3a --- /dev/null +++ b/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua @@ -0,0 +1,142 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +local docker = require "luci.model.docker" +local dk = docker.new() + +local m, s, o + +local res, containers, volumes, lost_state + +function get_volumes() + local data = {} + for i, v in ipairs(volumes) do + local index = v.Name + data[index]={} + data[index]["_selected"] = 0 + data[index]["_nameraw"] = v.Name + data[index]["_name"] = v.Name:sub(1,12) + + for ci,cv in ipairs(containers) do + if cv.Mounts and type(cv.Mounts) ~= "table" then + break + end + for vi, vv in ipairs(cv.Mounts) do + if v.Name == vv.Name then + data[index]["_containers"] = (data[index]["_containers"] and (data[index]["_containers"] .. " | ") or "").. + ''.. cv.Names[1]:sub(2)..'' + end + end + end + data[index]["_driver"] = v.Driver + data[index]["_mountpoint"] = nil + + for v1 in v.Mountpoint:gmatch('[^/]+') do + if v1 == index then + data[index]["_mountpoint"] = data[index]["_mountpoint"] .."/" .. v1:sub(1,12) .. "..." + else + data[index]["_mountpoint"] = (data[index]["_mountpoint"] and data[index]["_mountpoint"] or "").."/".. v1 + end + end + data[index]["_created"] = v.CreatedAt + data[index]["_size"] = "-" + end + + return data +end +if dk:_ping().code ~= 200 then + lost_state = true +else + res = dk.volumes:list() + if res and res.code and res.code <300 then + volumes = res.body.Volumes + end + + res = dk.containers:list({ + query = { + all=true + } + }) + if res and res.code and res.code <300 then + containers = res.body + end +end + +local volume_list = not lost_state and get_volumes() or {} + +m = SimpleForm("docker", translate("Docker - Volumes")) +m.submit=false +m.reset=false +m:append(Template("dockerman/volume_size")) + +s = m:section(Table, volume_list, translate("Volumes overview")) + +o = s:option(Flag, "_selected","") +o.disabled = 0 +o.enabled = 1 +o.default = 0 +o.write = function(self, section, value) + volume_list[section]._selected = value +end + +o = s:option(DummyValue, "_name", translate("Name")) +o = s:option(DummyValue, "_driver", translate("Driver")) +o = s:option(DummyValue, "_containers", translate("Containers")) +o.rawhtml = true +o = s:option(DummyValue, "_mountpoint", translate("Mount Point")) +o = s:option(DummyValue, "_size", translate("Size")) +o.rawhtml = true +o = s:option(DummyValue, "_created", translate("Created")) + +s = m:section(SimpleSection) +s.template = "dockerman/apply_widget" +s.err=docker:read_status() +s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") +if s.err then + docker:clear_status() +end + +s = m:section(Table,{{}}) +s.notitle=true +s.rowcolors=false +s.template="cbi/nullsection" + +o = s:option(Button, "remove") +o.inputtitle= translate("Remove") +o.template = "dockerman/cbi/inlinebutton" +o.inputstyle = "remove" +o.forcewrite = true +o.disable = lost_state +o.write = function(self, section) + local volume_selected = {} + + for k in pairs(volume_list) do + if volume_list[k]._selected == 1 then + volume_selected[#volume_selected+1] = k + end + end + + if next(volume_selected) ~= nil then + local success = true + docker:clear_status() + for _,vol in ipairs(volume_selected) do + docker:append_status("Volumes: " .. "remove" .. " " .. vol .. "...") + local msg = dk.volumes["remove"](dk, {id = vol}) + if msg and msg.code and msg.code ~= 204 then + docker:append_status("code:" .. msg.code.." ".. (msg.body.message and msg.body.message or msg.message).. "\n") + success = false + else + docker:append_status("done\n") + end + end + + if success then + docker:clear_status() + end + luci.http.redirect(luci.dispatcher.build_url("admin/docker/volumes")) + end +end + +return m diff --git a/luci-app-dockerman/luasrc/model/docker.lua b/luci-app-dockerman/luasrc/model/docker.lua new file mode 100755 index 000000000..2a902912a --- /dev/null +++ b/luci-app-dockerman/luasrc/model/docker.lua @@ -0,0 +1,507 @@ +--[[ +LuCI - Lua Configuration Interface +Copyright 2019 lisaac +]]-- + +local docker = require "luci.docker" +local fs = require "nixio.fs" +local uci = (require "luci.model.uci").cursor() + +local _docker = {} +_docker.options = {} + +--pull image and return iamge id +local update_image = function(self, image_name) + local json_stringify = luci.jsonc and luci.jsonc.stringify + _docker:append_status("Images: " .. "pulling" .. " " .. image_name .. "...\n") + local res = self.images:create({query = {fromImage=image_name}}, _docker.pull_image_show_status_cb) + + if res and res.code and res.code == 200 and (#res.body > 0 and not res.body[#res.body].error and res.body[#res.body].status and (res.body[#res.body].status == "Status: Downloaded newer image for ".. image_name)) then + _docker:append_status("done\n") + else + res.body.message = res.body[#res.body] and res.body[#res.body].error or (res.body.message or res.message) + end + + new_image_id = self.images:inspect({name = image_name}).body.Id + return new_image_id, res +end + +local table_equal = function(t1, t2) + if not t1 then + return true + end + + if not t2 then + return false + end + + if #t1 ~= #t2 then + return false + end + + for i, v in ipairs(t1) do + if t1[i] ~= t2[i] then + return false + end + end + + return true +end + +local table_subtract = function(t1, t2) + if not t1 or next(t1) == nil then + return nil + end + + if not t2 or next(t2) == nil then + return t1 + end + + local res = {} + for _, v1 in ipairs(t1) do + local found = false + for _, v2 in ipairs(t2) do + if v1 == v2 then + found= true + break + end + end + if not found then + table.insert(res, v1) + end + end + + return next(res) == nil and nil or res +end + +local map_subtract = function(t1, t2) + if not t1 or next(t1) == nil then + return nil + end + + if not t2 or next(t2) == nil then + return t1 + end + + local res = {} + for k1, v1 in pairs(t1) do + local found = false + for k2, v2 in ipairs(t2) do + if k1 == k2 and luci.util.serialize_data(v1) == luci.util.serialize_data(v2) then + found= true + break + end + end + + if not found then + res[k1] = v1 + end + end + + return next(res) ~= nil and res or nil +end + +_docker.clear_empty_tables = function ( t ) + local k, v + + if next(t) == nil then + t = nil + else + for k, v in pairs(t) do + if type(v) == 'table' then + t[k] = _docker.clear_empty_tables(v) + if t[k] and next(t[k]) == nil then + t[k] = nil + end + end + end + end + + return t +end + +local get_config = function(container_config, image_config) + local config = container_config.Config + local old_host_config = container_config.HostConfig + local old_network_setting = container_config.NetworkSettings.Networks or {} + + if config.WorkingDir == image_config.WorkingDir then + config.WorkingDir = "" + end + + if config.User == image_config.User then + config.User = "" + end + + if table_equal(config.Cmd, image_config.Cmd) then + config.Cmd = nil + end + + if table_equal(config.Entrypoint, image_config.Entrypoint) then + config.Entrypoint = nil + end + + if table_equal(config.ExposedPorts, image_config.ExposedPorts) then + config.ExposedPorts = nil + end + + config.Env = table_subtract(config.Env, image_config.Env) + config.Labels = table_subtract(config.Labels, image_config.Labels) + config.Volumes = map_subtract(config.Volumes, image_config.Volumes) + + if old_host_config.PortBindings and next(old_host_config.PortBindings) ~= nil then + config.ExposedPorts = {} + for p, v in pairs(old_host_config.PortBindings) do + config.ExposedPorts[p] = { HostPort=v[1] and v[1].HostPort } + end + end + + local network_setting = {} + local multi_network = false + local extra_network = {} + + for k, v in pairs(old_network_setting) do + if multi_network then + extra_network[k] = v + else + network_setting[k] = v + end + multi_network = true + end + + local host_config = old_host_config + host_config.Mounts = {} + for i, v in ipairs(container_config.Mounts) do + if v.Type == "volume" then + table.insert(host_config.Mounts, { + Type = v.Type, + Target = v.Destination, + Source = v.Source:match("([^/]+)\/_data"), + BindOptions = (v.Type == "bind") and {Propagation = v.Propagation} or nil, + ReadOnly = not v.RW + }) + end + end + + local create_body = config + create_body["HostConfig"] = host_config + create_body["NetworkingConfig"] = {EndpointsConfig = network_setting} + create_body = _docker.clear_empty_tables(create_body) or {} + extra_network = _docker.clear_empty_tables(extra_network) or {} + + return create_body, extra_network +end + +local upgrade = function(self, request) + _docker:clear_status() + + local container_info = self.containers:inspect({id = request.id}) + + if container_info.code > 300 and type(container_info.body) == "table" then + return container_info + end + + local image_name = container_info.body.Config.Image + if not image_name:match(".-:.+") then + image_name = image_name .. ":latest" + end + + local old_image_id = container_info.body.Image + local container_name = container_info.body.Name:sub(2) + + local image_id, res = update_image(self, image_name) + if res and res.code and res.code ~= 200 then + return res + end + + if image_id == old_image_id then + return {code = 305, body = {message = "Already up to date"}} + end + + local t = os.date("%Y%m%d%H%M%S") + _docker:append_status("Container: rename" .. " " .. container_name .. " to ".. container_name .. "_old_".. t .. "...") + res = self.containers:rename({name = container_name, query = { name = container_name .. "_old_" ..t }}) + if res and res.code and res.code < 300 then + _docker:append_status("done\n") + else + return res + end + + local image_config = self.images:inspect({id = old_image_id}).body.Config + local create_body, extra_network = get_config(container_info.body, image_config) + + -- create new container + _docker:append_status("Container: Create" .. " " .. container_name .. "...") + create_body = _docker.clear_empty_tables(create_body) + res = self.containers:create({name = container_name, body = create_body}) + if res and res.code and res.code > 300 then + return res + end + _docker:append_status("done\n") + + -- extra networks need to network connect action + for k, v in pairs(extra_network) do + _docker:append_status("Networks: Connect" .. " " .. container_name .. "...") + res = self.networks:connect({id = k, body = {Container = container_name, EndpointConfig = v}}) + if res and res.code and res.code > 300 then + return res + end + _docker:append_status("done\n") + end + + _docker:append_status("Container: " .. "Stop" .. " " .. container_name .. "_old_".. t .. "...") + res = self.containers:stop({name = container_name .. "_old_" ..t }) + if res and res.code and res.code < 305 then + _docker:append_status("done\n") + else + return res + end + + _docker:append_status("Container: " .. "Start" .. " " .. container_name .. "...") + res = self.containers:start({name = container_name}) + if res and res.code and res.code < 305 then + _docker:append_status("done\n") + else + return res + end + + _docker:clear_status() + return res +end + +local duplicate_config = function (self, request) + local container_info = self.containers:inspect({id = request.id}) + if container_info.code > 300 and type(container_info.body) == "table" then + return nil + end + + local old_image_id = container_info.body.Image + local image_config = self.images:inspect({id = old_image_id}).body.Config + + return get_config(container_info.body, image_config) +end + +_docker.new = function() + local host = nil + local port = nil + local socket_path = nil + local debug_path = nil + + if uci:get_bool("dockerd", "dockerman", "remote_endpoint") then + host = uci:get("dockerd", "dockerman", "remote_host") or nil + port = uci:get("dockerd", "dockerman", "remote_port") or nil + else + socket_path = uci:get("dockerd", "dockerman", "socket_path") or "/var/run/docker.sock" + end + + local debug = uci:get_bool("dockerd", "dockerman", "debug") + if debug then + debug_path = uci:get("dockerd", "dockerman", "debug_path") or "/tmp/.docker_debug" + end + + local status_path = uci:get("dockerd", "dockerman", "status_path") or "/tmp/.docker_action_status" + + _docker.options = { + host = host, + port = port, + socket_path = socket_path, + debug = debug, + debug_path = debug_path, + status_path = status_path + } + + local _new = docker.new(_docker.options) + _new.containers_upgrade = upgrade + _new.containers_duplicate_config = duplicate_config + + return _new +end + +_docker.options.status_path = uci:get("dockerd", "dockerman", "status_path") or "/tmp/.docker_action_status" + +_docker.append_status=function(self,val) + if not val then + return + end + local file_docker_action_status=io.open(self.options.status_path, "a+") + file_docker_action_status:write(val) + file_docker_action_status:close() +end + +_docker.write_status=function(self,val) + if not val then + return + end + local file_docker_action_status=io.open(self.options.status_path, "w+") + file_docker_action_status:write(val) + file_docker_action_status:close() +end + +_docker.read_status=function(self) + return fs.readfile(self.options.status_path) +end + +_docker.clear_status=function(self) + fs.remove(self.options.status_path) +end + +local status_cb = function(res, source, handler) + res.body = res.body or {} + while true do + local chunk = source() + if chunk then + --standard output to res.body + table.insert(res.body, chunk) + handler(chunk) + else + return + end + end +end + +--{"status":"Pulling from library\/debian","id":"latest"} +--{"status":"Pulling fs layer","progressDetail":[],"id":"50e431f79093"} +--{"status":"Downloading","progressDetail":{"total":50381971,"current":2029978},"id":"50e431f79093","progress":"[==> ] 2.03MB\/50.38MB"} +--{"status":"Download complete","progressDetail":[],"id":"50e431f79093"} +--{"status":"Extracting","progressDetail":{"total":50381971,"current":17301504},"id":"50e431f79093","progress":"[=================> ] 17.3MB\/50.38MB"} +--{"status":"Pull complete","progressDetail":[],"id":"50e431f79093"} +--{"status":"Digest: sha256:a63d0b2ecbd723da612abf0a8bdb594ee78f18f691d7dc652ac305a490c9b71a"} +--{"status":"Status: Downloaded newer image for debian:latest"} +_docker.pull_image_show_status_cb = function(res, source) + return status_cb(res, source, function(chunk) + local json_parse = luci.jsonc.parse + local step = json_parse(chunk) + if type(step) == "table" then + local buf = _docker:read_status() + local num = 0 + local str = '\t' .. (step.id and (step.id .. ": ") or "") .. (step.status and step.status or "") .. (step.progress and (" " .. step.progress) or "").."\n" + if step.id then + buf, num = buf:gsub("\t"..step.id .. ": .-\n", str) + end + if num == 0 then + buf = buf .. str + end + _docker:write_status(buf) + end + end) +end + +--{"status":"Downloading from https://downloads.openwrt.org/releases/19.07.0/targets/x86/64/openwrt-19.07.0-x86-64-generic-rootfs.tar.gz"} +--{"status":"Importing","progressDetail":{"current":1572391,"total":3821714},"progress":"[====================\u003e ] 1.572MB/3.822MB"} +--{"status":"sha256:d5304b58e2d8cc0a2fd640c05cec1bd4d1229a604ac0dd2909f13b2b47a29285"} +_docker.import_image_show_status_cb = function(res, source) + return status_cb(res, source, function(chunk) + local json_parse = luci.jsonc.parse + local step = json_parse(chunk) + if type(step) == "table" then + local buf = _docker:read_status() + local num = 0 + local str = '\t' .. (step.status and step.status or "") .. (step.progress and (" " .. step.progress) or "").."\n" + if step.status then + buf, num = buf:gsub("\t"..step.status .. " .-\n", str) + end + if num == 0 then + buf = buf .. str + end + _docker:write_status(buf) + end + end) +end + +_docker.create_macvlan_interface = function(name, device, gateway, subnet) + if not fs.access("/etc/config/network") or not fs.access("/etc/config/firewall") then + return + end + + if uci:get_bool("dockerd", "dockerman", "remote_endpoint") then + return + end + + local ip = require "luci.ip" + local if_name = "docker_"..name + local dev_name = "macvlan_"..name + local net_mask = tostring(ip.new(subnet):mask()) + local lan_interfaces + + -- add macvlan device + uci:delete("network", dev_name) + uci:set("network", dev_name, "device") + uci:set("network", dev_name, "name", dev_name) + uci:set("network", dev_name, "ifname", device) + uci:set("network", dev_name, "type", "macvlan") + uci:set("network", dev_name, "mode", "bridge") + + -- add macvlan interface + uci:delete("network", if_name) + uci:set("network", if_name, "interface") + uci:set("network", if_name, "proto", "static") + uci:set("network", if_name, "ifname", dev_name) + uci:set("network", if_name, "ipaddr", gateway) + uci:set("network", if_name, "netmask", net_mask) + uci:foreach("firewall", "zone", function(s) + if s.name == "lan" then + local interfaces + if type(s.network) == "table" then + interfaces = table.concat(s.network, " ") + uci:delete("firewall", s[".name"], "network") + else + interfaces = s.network and s.network or "" + end + interfaces = interfaces .. " " .. if_name + interfaces = interfaces:gsub("%s+", " ") + uci:set("firewall", s[".name"], "network", interfaces) + end + end) + + uci:commit("firewall") + uci:commit("network") + + os.execute("ifup " .. if_name) +end + +_docker.remove_macvlan_interface = function(name) + if not fs.access("/etc/config/network") or not fs.access("/etc/config/firewall") then + return + end + + if uci:get_bool("dockerd", "dockerman", "remote_endpoint") then + return + end + + local if_name = "docker_"..name + local dev_name = "macvlan_"..name + uci:foreach("firewall", "zone", function(s) + if s.name == "lan" then + local interfaces + if type(s.network) == "table" then + interfaces = table.concat(s.network, " ") + else + interfaces = s.network and s.network or "" + end + interfaces = interfaces and interfaces:gsub(if_name, "") + interfaces = interfaces and interfaces:gsub("%s+", " ") + uci:set("firewall", s[".name"], "network", interfaces) + end + end) + + uci:delete("network", dev_name) + uci:delete("network", if_name) + uci:commit("network") + uci:commit("firewall") + + os.execute("ip link del " .. if_name) +end + +_docker.byte_format = function (byte) + if not byte then return 'NaN' end + local suff = {"B", "KB", "MB", "GB", "TB"} + for i=1, 5 do + if byte > 1024 and i < 5 then + byte = byte / 1024 + else + return string.format("%.2f %s", byte, suff[i]) + end + end +end + +return _docker diff --git a/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm b/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm new file mode 100755 index 000000000..f96b2d72a --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm @@ -0,0 +1,147 @@ + + + diff --git a/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm b/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm new file mode 100755 index 000000000..a061a6dba --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm @@ -0,0 +1,7 @@ +
+ <% if self:cfgvalue(section) ~= false then %> + " type="submit"" <% if self.disable then %>disabled <% end %><%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> /> + <% else %> + - + <% end %> +
diff --git a/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm b/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm new file mode 100755 index 000000000..e4b0cf7a0 --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm @@ -0,0 +1,33 @@ +
+ + <%- if self.password then -%> + /> + <%- end -%> + 0, "data-choices", { self.keylist, self.vallist }) + %> /> + <%- if self.password then -%> +
+ <% end %> +
diff --git a/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm b/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm new file mode 100755 index 000000000..244d2c10a --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm @@ -0,0 +1,9 @@ +<% if self:cfgvalue(self.section) then section = self.section %> +
+ <%+cbi/tabmenu%> +
+ <%+cbi/ucisection%> +
+
+<% end %> + diff --git a/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm b/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm new file mode 100755 index 000000000..04f7bc2ee --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm @@ -0,0 +1,10 @@ +<%+cbi/valueheader%> + /> + disabled <% end %><%= + attr("id", cbid) .. attr("name", cbid) .. attr("value", self.enabled or 1) .. + ifattr((self:cfgvalue(section) or self.default) == self.enabled, "checked", "checked") + %> /> + > +<%+cbi/valuefooter%> diff --git a/luci-app-dockerman/luasrc/view/dockerman/container.htm b/luci-app-dockerman/luasrc/view/dockerman/container.htm new file mode 100755 index 000000000..9f05d9d58 --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/container.htm @@ -0,0 +1,28 @@ +
+ + + diff --git a/luci-app-dockerman/luasrc/view/dockerman/container_console.htm b/luci-app-dockerman/luasrc/view/dockerman/container_console.htm new file mode 100755 index 000000000..1a4dc2a6b --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/container_console.htm @@ -0,0 +1,6 @@ +
+ +
+ diff --git a/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm b/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm new file mode 100755 index 000000000..2e0650d9d --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm @@ -0,0 +1,332 @@ + +
+ +
+ + +
+
+
+ + diff --git a/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm b/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm new file mode 100755 index 000000000..bbcd633e7 --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm @@ -0,0 +1,81 @@ + diff --git a/luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm b/luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm new file mode 100755 index 000000000..d88e28be9 --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm @@ -0,0 +1,91 @@ + \ No newline at end of file diff --git a/luci-app-dockerman/luasrc/view/dockerman/images_import.htm b/luci-app-dockerman/luasrc/view/dockerman/images_import.htm new file mode 100755 index 000000000..0ad6e0fce --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/images_import.htm @@ -0,0 +1,104 @@ + + +
+ disabled <% end %>/> + +
+ + diff --git a/luci-app-dockerman/luasrc/view/dockerman/images_load.htm b/luci-app-dockerman/luasrc/view/dockerman/images_load.htm new file mode 100755 index 000000000..b201510ac --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/images_load.htm @@ -0,0 +1,40 @@ +
+ disabled <% end %>/> + +
+ diff --git a/luci-app-dockerman/luasrc/view/dockerman/logs.htm b/luci-app-dockerman/luasrc/view/dockerman/logs.htm new file mode 100755 index 000000000..6cd2cb095 --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/logs.htm @@ -0,0 +1,13 @@ +<% if self.title == "Events" then %> +<%+header%> +

<%:Docker - Events%>

+
+

<%:Events%>

+<% end %> +
+ +
+<% if self.title == "Events" then %> +
+<%+footer%> +<% end %> diff --git a/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm b/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm new file mode 100755 index 000000000..338fd59d5 --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm @@ -0,0 +1,102 @@ + + + +<%+cbi/valueheader%> + + + +<%+cbi/valuefooter%> diff --git a/luci-app-dockerman/luasrc/view/dockerman/overview.htm b/luci-app-dockerman/luasrc/view/dockerman/overview.htm new file mode 100755 index 000000000..e491fc512 --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/overview.htm @@ -0,0 +1,197 @@ + + +
+
+
+
+
+ +
+
+
+

<%:Containers%>

+

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

+
+
+
+
+
+
+
+ +
+
+
+

<%:Images%>

+

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

+
+
+
+
+
+
+
+ +
+
+
+

<%:Networks%>

+

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

+
+
+
+
+
+
+
+ +
+
+
+

<%:Volumes%>

+

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

+
+
+
+
diff --git a/luci-app-dockerman/luasrc/view/dockerman/volume_size.htm b/luci-app-dockerman/luasrc/view/dockerman/volume_size.htm new file mode 100755 index 000000000..dc024734b --- /dev/null +++ b/luci-app-dockerman/luasrc/view/dockerman/volume_size.htm @@ -0,0 +1,21 @@ + \ No newline at end of file diff --git a/luci-app-dockerman/po/templates/dockerman.pot b/luci-app-dockerman/po/templates/dockerman.pot new file mode 100755 index 000000000..0d6a5de98 --- /dev/null +++ b/luci-app-dockerman/po/templates/dockerman.pot @@ -0,0 +1,1002 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:619 +msgid "A list of kernel capabilities to add to the container" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:69 +msgid "Access Control" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:223 +msgid "Add" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:595 +msgid "Add host device to the container" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:571 +msgid "Advance" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:586 +msgid "Allocates an ephemeral host port for all of a container's exposed ports" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:118 +msgid "Allowed access interfaces" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:498 +msgid "Always pull image first" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:29 +msgid "" +"An overview with the relevant data is displayed here with which the LuCI " +"docker client is connected." +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:43 +msgid "Api Version" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:94 +msgid "Auto create macvlan interface in Openwrt" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:18 +msgid "Auto start" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:134 +msgid "Available" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:47 +msgid "Base device" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:553 +msgid "Bind Mount(-v)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:554 +msgid "Bind mount a volume" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:596 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:652 +msgid "Block IO Weight" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:653 +msgid "" +"Block IO weight (relative weight) accepts a weight value between 10 and 1000" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:597 +msgid "" +"Block IO weight (relative weight) accepts a weight value between 10 and 1000." +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:61 +msgid "Bridge (Support direct communication between MAC VLANs)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:42 +msgid "Bridge device" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:84 +msgid "" +"By entering a valid image name with the corresponding version, the docker " +"image can be downloaded from the configured registry." +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:618 +msgid "CAP-ADD(--cap-add)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:581 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:635 +msgid "CPU Shares Weight" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:779 +msgid "CPU Useage" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:636 +msgid "" +"CPU shares relative weight, if 0 is set, the system will ignore the value " +"and use the default of 1024" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:582 +msgid "" +"CPU shares relative weight, if 0 is set, the system will ignore the value " +"and use the default of 1024." +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:573 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:626 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:44 +msgid "CPUs" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:159 +msgid "Can NOT connect to docker daemon, please check!!" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 +msgid "Cancel" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:60 +msgid "Client connection" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:347 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:687 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:182 +msgid "Command" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:100 +msgid "Command line" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:72 +msgid "Command line Error" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:17 +msgid "Configuration" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:36 +msgid "Configure the default bridge network" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:405 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:707 +msgid "Connect" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:403 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:437 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:473 +msgid "Connect Network" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:74 +msgid "Connect to remote docker endpoint" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:7 +msgid "Console" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:161 +msgid "Container Info" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:650 +msgid "Container Inspect" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:671 +msgid "Container Logs" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:473 +msgid "Container Name" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:92 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:58 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:29 +msgid "Container detail" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:38 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:142 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:148 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:87 +#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:133 +msgid "Containers" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:94 +msgid "Create macvlan interface" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:465 +msgid "Create new docker container" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:31 +msgid "Create new docker network" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:312 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:153 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:92 +msgid "Created" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:33 +msgid "DELETING" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:371 +msgid "DNS" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:51 +msgid "Debug" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:35 +msgid "Default bridge" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:363 +msgid "Device" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:594 +msgid "Device(--device)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:396 +msgid "Disconnect" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:14 +msgid "Docker" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:12 +msgid "Docker - Configuration" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:192 +msgid "Docker - Container (%s)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:128 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:450 +msgid "Docker - Containers" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/logs.htm:3 +msgid "Docker - Events" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:72 +msgid "Docker - Images" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:15 +msgid "Docker - Network" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:54 +msgid "Docker - Networks" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:28 +msgid "Docker - Overview" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:69 +msgid "Docker - Volumes" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:16 +msgid "Docker Daemon settings" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:489 +msgid "Docker Image" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:30 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:46 +msgid "Docker Root Dir" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:93 +msgid "Docker Socket Path" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:42 +msgid "Docker Version" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm:91 +msgid "Docker actions done." +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:70 +msgid "DockerMan" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:13 +msgid "DockerMan is a simple docker manager client for LuCI" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:68 +msgid "DockerMan settings" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:172 +msgid "Download" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:82 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:40 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:85 +msgid "Driver" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:265 +msgid "Duplicate/Edit" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:120 +msgid "Enable IPv6" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:351 +msgid "Env" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:546 +msgid "Environmental Variable(-e)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:54 +msgid "Error" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:42 +#: applications/luci-app-dockerman/luasrc/view/dockerman/logs.htm:5 +msgid "Events" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:116 +msgid "Exclude IPs" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:247 +msgid "Export" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:585 +msgid "Exposed All Ports(-P)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:560 +msgid "Exposed Ports(-p)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:55 +msgid "Fatal" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:6 +msgid "File" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:324 +msgid "Finish Time" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:220 +msgid "Force Remove" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:88 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:106 +msgid "Gateway" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:33 +msgid "Github" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm:4 +msgid "Go to relevant configuration page" +msgstr "" + +#: applications/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json:3 +msgid "Grant UCI access for luci-app-dockerman" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:330 +msgid "Healthy" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:578 +msgid "Host Name" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:100 +msgid "Host or IP Address for the connection to a remote docker instance" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:300 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:142 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:78 +msgid "ID" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:44 +msgid "IP VLAN" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:111 +msgid "IP range" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:522 +msgid "IPv4 Address" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:132 +msgid "IPv6 Gateway" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:126 +msgid "IPv6 Subnet" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:304 +#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 +msgid "Image" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:39 +#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:151 +msgid "Images" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:132 +msgid "Images overview" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:4 +msgid "Import" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:125 +msgid "Import Image" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:47 +msgid "Index Server Address" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:52 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:414 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:102 +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:3 +msgid "Info" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:74 +msgid "Ingress" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:75 +msgid "" +"Ingress network is the network which provides the routing-mesh in swarm mode" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:8 +msgid "Inspect" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:477 +msgid "Interactive (-i)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:86 +msgid "Internal" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:66 +msgid "Ipvlan Mode" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:43 +msgid "" +"It replaces the daemon registry mirrors with a new set of registry mirrors" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:238 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:264 +msgid "Kill" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:70 +msgid "L2 bridge" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:71 +msgid "L3 bridge" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:359 +msgid "Links" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:527 +msgid "Links with other containers" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:283 +#: applications/luci-app-dockerman/luasrc/view/dockerman/images_load.htm:2 +msgid "Load" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:49 +msgid "Log Level" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:661 +msgid "Log driver options" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:9 +msgid "Logs" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:43 +msgid "MAC VLAN" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:589 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:644 +msgid "Memory" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:783 +msgid "Memory Useage" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:645 +msgid "" +"Memory limit (format: []). Number is a positive integer. Unit " +"can be one of b, k, m, or g. Minimum is 4M" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:590 +msgid "" +"Memory limit (format: []). Number is a positive integer. Unit " +"can be one of b, k, m, or g. Minimum is 4M." +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:57 +msgid "Mode" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:90 +msgid "Mount Point" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:603 +msgid "Mount tmpfs directory" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:343 +msgid "Mount/Volume" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:175 +msgid "Mounts" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:295 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:419 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:83 +msgid "Name" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:37 +msgid "Name of the network that can be selected during container creation" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:394 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:528 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:169 +msgid "Network" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:80 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:36 +msgid "Network Name" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:40 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:518 +#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:169 +msgid "Networks" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:59 +msgid "Networks overview" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:104 +msgid "New" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:39 +#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 +msgid "New tag" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:627 +msgid "Number of CPUs. Number is a fractional number. 0.000 means no limit" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:574 +msgid "Number of CPUs. Number is a fractional number. 0.000 means no limit." +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:73 +msgid "" +"On this page all images are displayed that are available on the system and " +"with which a container can be created." +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:193 +msgid "On this page, the selected container can be managed." +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:82 +msgid "Options" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:45 +msgid "Overlay network" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:37 +msgid "Overview" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:33 +msgid "PLEASE CONFIRM" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:84 +msgid "Parent Interface" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:64 +msgid "Pass-through (Mirror physical device to single MAC VLAN)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 +msgid "Please input new tag" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:270 +msgid "Please input the PATH and select the file !" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:82 +msgid "Please input the PORT or HOST IP of remote docker instance!" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:86 +msgid "Please input the SOCKET PATH of docker daemon!" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 +msgid "Plese input command line:" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:355 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:172 +msgid "Ports" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:124 +msgid "Ports allowed to be accessed" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:62 +msgid "Private (Prevent communication between MAC VLANs)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:504 +msgid "Privileged" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:561 +msgid "Publish container's port(s) to the host" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:100 +msgid "Pull" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:83 +msgid "Pull Image" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:42 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:48 +msgid "Registry Mirrors" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:73 +msgid "Remote Endpoint" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:99 +msgid "Remote Host" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:106 +msgid "Remote Port" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:274 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:274 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:210 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:115 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:108 +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:173 +msgid "Remove" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:43 +#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:82 +msgid "Remove tag" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:171 +msgid "Rename" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:145 +msgid "RepoTags" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:469 +msgid "Resolve CLI" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:4 +msgid "Resources" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:220 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:244 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:87 +msgid "Restart" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:334 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:427 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:510 +msgid "Restart Policy" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:86 +msgid "Restrict external access to the network" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm:31 +msgid "Reveal/hide password" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:566 +msgid "Run command" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:230 +msgid "Save" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:533 +msgid "Set custom DNS servers" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:547 +msgid "Set environment variables to inside the container" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:50 +msgid "Set the logging level" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:151 +msgid "Size" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:61 +msgid "" +"Specifies where the Docker daemon will listen for client connections " +"(default: unix:///var/run/docker.sock)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:211 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:234 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:65 +msgid "Start" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:319 +msgid "Start Time" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:789 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:790 +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:5 +msgid "Stats" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:308 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:165 +msgid "Status" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:229 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:254 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:65 +msgid "Stop" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 +msgid "Submit" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:86 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:101 +msgid "Subnet" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:375 +msgid "Sysctl" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:610 +msgid "Sysctl(--sysctl)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:611 +msgid "Sysctls (kernel parameters) options" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:792 +msgid "TOP" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:483 +msgid "TTY (-t)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm:56 +msgid "TX/RX" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:579 +msgid "The hostname to use for the container" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:662 +msgid "The logging configuration for this container" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:540 +msgid "" +"The user that commands are run as inside the container.(format: name|uid[:" +"group|gid])" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:129 +msgid "" +"This page displays all containers that have been created on the connected " +"docker host." +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:55 +msgid "" +"This page displays all docker networks that have been created on the " +"connected docker host." +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:367 +msgid "Tmpfs" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:602 +msgid "Tmpfs(--tmpfs)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:45 +msgid "Total Memory" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:697 +msgid "UID" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:297 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:336 +msgid "Update" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:256 +msgid "Upgrade" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:7 +msgid "Upload" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:303 +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:304 +msgid "Upload Error" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:294 +msgid "Upload Success" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm:48 +msgid "Upload/Download" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:339 +msgid "User" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:539 +msgid "User(-u)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:63 +msgid "VEPA (Virtual Ethernet Port Aggregator)" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:41 +#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:187 +msgid "Volumes" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:73 +msgid "Volumes overview" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:53 +msgid "Warning" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:126 +msgid "" +"When pressing the Import button, both a local image can be loaded onto the " +"system and a valid image tar can be downloaded from remote." +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:124 +msgid "" +"Which Port(s) can be accessed, it's not restricted by the Allowed Access " +"interfaces configuration. Use this configuration with caution!" +msgstr "" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:118 +msgid "" +"Which interface(s) can access containers under the bridge network, fill-in " +"Interface Name" +msgstr "" diff --git a/luci-app-dockerman/po/zh-cn/dockerman.po b/luci-app-dockerman/po/zh-cn/dockerman.po new file mode 100755 index 000000000..2bdc11b8d --- /dev/null +++ b/luci-app-dockerman/po/zh-cn/dockerman.po @@ -0,0 +1,1094 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-03-19 04:16+0000\n" +"Last-Translator: Eric \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.5.2-dev\n" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:619 +msgid "A list of kernel capabilities to add to the container" +msgstr "要添加到容器的内核功能列表" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:69 +msgid "Access Control" +msgstr "访问控制" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:223 +msgid "Add" +msgstr "新增" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:595 +msgid "Add host device to the container" +msgstr "将主机设备添加到容器" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:571 +msgid "Advance" +msgstr "高级选项" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:586 +msgid "Allocates an ephemeral host port for all of a container's exposed ports" +msgstr "为容器的所有暴露端口分配临时主机端口" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:118 +msgid "Allowed access interfaces" +msgstr "允许的访问接口" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:498 +msgid "Always pull image first" +msgstr "总是先拉取镜像" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:29 +msgid "" +"An overview with the relevant data is displayed here with which the LuCI " +"docker client is connected." +msgstr "在此展示与LuCI docker客户端相连接的相关数据的概览。" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:43 +msgid "Api Version" +msgstr "Api 版本" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:94 +msgid "Auto create macvlan interface in Openwrt" +msgstr "在 Openwrt 中自动创建 macvlan 界面" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:18 +msgid "Auto start" +msgstr "自动启动" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:134 +msgid "Available" +msgstr "可用" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:47 +msgid "Base device" +msgstr "基设备" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:553 +msgid "Bind Mount(-v)" +msgstr "绑定挂载(-v)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:554 +msgid "Bind mount a volume" +msgstr "绑定挂载卷" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:596 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:652 +msgid "Block IO Weight" +msgstr "块 IO 权重" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:653 +msgid "" +"Block IO weight (relative weight) accepts a weight value between 10 and 1000" +msgstr "块 IO 权重(相对权重)接受10到1000之间的数值" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:597 +msgid "" +"Block IO weight (relative weight) accepts a weight value between 10 and 1000." +msgstr "块 IO 权重(相对权重)接受10到1000之间的数值。" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:61 +msgid "Bridge (Support direct communication between MAC VLANs)" +msgstr "桥接(支持 MAC VLAN 之间的直接通信)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:42 +msgid "Bridge device" +msgstr "Bridge device" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:84 +msgid "" +"By entering a valid image name with the corresponding version, the docker " +"image can be downloaded from the configured registry." +msgstr "" +"通过输入具有相应版本的有效映像名称,可以从镜像存储中心(Registry)中下载" +"docker映像。" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:618 +msgid "CAP-ADD(--cap-add)" +msgstr "权限控制(--cap-add)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:581 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:635 +msgid "CPU Shares Weight" +msgstr "CPU 共享权重" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:779 +msgid "CPU Useage" +msgstr "CPU 使用率" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:636 +msgid "" +"CPU shares relative weight, if 0 is set, the system will ignore the value " +"and use the default of 1024" +msgstr "CPU 共享相对权重,如果设置为 0,则系统将忽略该值并使用默认值 1024" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:582 +msgid "" +"CPU shares relative weight, if 0 is set, the system will ignore the value " +"and use the default of 1024." +msgstr "CPU 共享相对权重,如果设置为 0,则系统将忽略该值并使用默认值 1024。" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:573 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:626 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:44 +msgid "CPUs" +msgstr "线程数量" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:159 +msgid "Can NOT connect to docker daemon, please check!!" +msgstr "无法连接到docker守护进程(docker daemon),请检查!!" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 +msgid "Cancel" +msgstr "取消" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:60 +msgid "Client connection" +msgstr "客户端连接" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:347 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:687 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:182 +msgid "Command" +msgstr "命令" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:100 +msgid "Command line" +msgstr "命令行" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:72 +msgid "Command line Error" +msgstr "命令行错误" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:17 +msgid "Configuration" +msgstr "配置" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:36 +msgid "Configure the default bridge network" +msgstr "配置默认桥接网络" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:405 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:707 +msgid "Connect" +msgstr "连接" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:403 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:437 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:473 +msgid "Connect Network" +msgstr "连接网络" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:74 +msgid "Connect to remote docker endpoint" +msgstr "连接到远程docker" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:7 +msgid "Console" +msgstr "控制台" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:161 +msgid "Container Info" +msgstr "容器信息" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:650 +msgid "Container Inspect" +msgstr "检查容器" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:671 +msgid "Container Logs" +msgstr "容器日志" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:473 +msgid "Container Name" +msgstr "容器名称" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:92 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:58 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:29 +msgid "Container detail" +msgstr "容器详情" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:38 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:142 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:148 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:87 +#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:133 +msgid "Containers" +msgstr "容器" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:94 +msgid "Create macvlan interface" +msgstr "创建 macvlan 接口" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:465 +msgid "Create new docker container" +msgstr "创建 docker 容器" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:31 +msgid "Create new docker network" +msgstr "创建 docker 网络" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:312 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:153 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:92 +msgid "Created" +msgstr "创建时间" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:33 +msgid "DELETING" +msgstr "删除中" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:371 +msgid "DNS" +msgstr "DNS" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:51 +msgid "Debug" +msgstr "调试" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:35 +msgid "Default bridge" +msgstr "默认桥接" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:363 +msgid "Device" +msgstr "设备" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:594 +msgid "Device(--device)" +msgstr "设备(--device)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:396 +msgid "Disconnect" +msgstr "断开" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:14 +msgid "Docker" +msgstr "Docker" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:12 +msgid "Docker - Configuration" +msgstr "Docker - 配置" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:192 +msgid "Docker - Container (%s)" +msgstr "Docker - 容器 (%s)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:128 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:450 +msgid "Docker - Containers" +msgstr "Docker - 容器" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/logs.htm:3 +msgid "Docker - Events" +msgstr "Docker - 事件" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:72 +msgid "Docker - Images" +msgstr "Docker - 镜像" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:15 +msgid "Docker - Network" +msgstr "Docker - 网络" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:54 +msgid "Docker - Networks" +msgstr "Docker - 网络" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:28 +msgid "Docker - Overview" +msgstr "Docker - 概览" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:69 +msgid "Docker - Volumes" +msgstr "Docker - 存储卷" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:16 +msgid "Docker Daemon settings" +msgstr "Docker 服务端(Docker Daemon)设置" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:489 +msgid "Docker Image" +msgstr "Docker 镜像" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:30 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:46 +msgid "Docker Root Dir" +msgstr "Docker 根目录" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:93 +msgid "Docker Socket Path" +msgstr "Docker 套接字路径" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:42 +msgid "Docker Version" +msgstr "Docker 版本" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm:91 +msgid "Docker actions done." +msgstr "Docker 执行完成。" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:70 +msgid "DockerMan" +msgstr "DockerMan" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:13 +msgid "DockerMan is a simple docker manager client for LuCI" +msgstr "DockerMan是用于LuCI的简单docker管理器客户端" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:68 +msgid "DockerMan settings" +msgstr "DockerMan设置" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:172 +msgid "Download" +msgstr "下载" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:82 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:40 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:85 +msgid "Driver" +msgstr "驱动" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:265 +msgid "Duplicate/Edit" +msgstr "复制/编辑" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:120 +msgid "Enable IPv6" +msgstr "启用 IPv6" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:351 +msgid "Env" +msgstr "环境变量" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:546 +msgid "Environmental Variable(-e)" +msgstr "环境变量(-e)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:54 +msgid "Error" +msgstr "错误" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:42 +#: applications/luci-app-dockerman/luasrc/view/dockerman/logs.htm:5 +msgid "Events" +msgstr "事件" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:116 +msgid "Exclude IPs" +msgstr "排除 IP" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:247 +msgid "Export" +msgstr "导出" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:585 +msgid "Exposed All Ports(-P)" +msgstr "暴露所有端口(-P)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:560 +msgid "Exposed Ports(-p)" +msgstr "暴露端口(-p)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:55 +msgid "Fatal" +msgstr "致命的" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:6 +msgid "File" +msgstr "文件" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:324 +msgid "Finish Time" +msgstr "完成时间" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:220 +msgid "Force Remove" +msgstr "强制移除" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:88 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:106 +msgid "Gateway" +msgstr "网关" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:33 +msgid "Github" +msgstr "Github" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm:4 +msgid "Go to relevant configuration page" +msgstr "进入相关配置页面" + +#: applications/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json:3 +msgid "Grant UCI access for luci-app-dockerman" +msgstr "授予 UCI 访问 luci-app-dockerman 的权限" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:330 +msgid "Healthy" +msgstr "健康" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:578 +msgid "Host Name" +msgstr "主机名" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:100 +msgid "Host or IP Address for the connection to a remote docker instance" +msgstr "连接到远程Docker实例的主机名或IP地址" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:300 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:142 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:78 +msgid "ID" +msgstr "ID" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:44 +msgid "IP VLAN" +msgstr "IP VLAN" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:111 +msgid "IP range" +msgstr "IP 范围" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:522 +msgid "IPv4 Address" +msgstr "IPv4 地址" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:132 +msgid "IPv6 Gateway" +msgstr "IPv6 网关" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:126 +msgid "IPv6 Subnet" +msgstr "IPv6 子网" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:304 +#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 +msgid "Image" +msgstr "镜像" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:39 +#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:151 +msgid "Images" +msgstr "镜像" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:132 +msgid "Images overview" +msgstr "镜像概览" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:4 +msgid "Import" +msgstr "导入" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:125 +msgid "Import Image" +msgstr "导入镜像" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:47 +msgid "Index Server Address" +msgstr "索引服务器地址" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:52 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:414 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:102 +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:3 +msgid "Info" +msgstr "信息" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:74 +msgid "Ingress" +msgstr "入口" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:75 +msgid "" +"Ingress network is the network which provides the routing-mesh in swarm mode" +msgstr "入口网络是以群模式提供路由网格的网络" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:8 +msgid "Inspect" +msgstr "检查" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:477 +msgid "Interactive (-i)" +msgstr "交互(-i)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:86 +msgid "Internal" +msgstr "内部" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:66 +msgid "Ipvlan Mode" +msgstr "Ipvlan 模式" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:43 +msgid "" +"It replaces the daemon registry mirrors with a new set of registry mirrors" +msgstr "" +"设置新的镜像存储中心(Registry)镜像源,这将取代服务端(daemon)配置的镜像存" +"储中心(Registry)的镜像源" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:238 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:264 +msgid "Kill" +msgstr "强制关闭" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:70 +msgid "L2 bridge" +msgstr "L2 桥接" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:71 +msgid "L3 bridge" +msgstr "L3 桥接" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:359 +msgid "Links" +msgstr "链接" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:527 +msgid "Links with other containers" +msgstr "与其他容器的链接" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:283 +#: applications/luci-app-dockerman/luasrc/view/dockerman/images_load.htm:2 +msgid "Load" +msgstr "负载" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:49 +msgid "Log Level" +msgstr "日志等级" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:661 +msgid "Log driver options" +msgstr "日志驱动选项" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:9 +msgid "Logs" +msgstr "日志" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:43 +msgid "MAC VLAN" +msgstr "MAC VLAN" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:589 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:644 +msgid "Memory" +msgstr "内存" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:783 +msgid "Memory Useage" +msgstr "内存使用率" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:645 +msgid "" +"Memory limit (format: []). Number is a positive integer. Unit " +"can be one of b, k, m, or g. Minimum is 4M" +msgstr "" +"内存限制(格式:<数字>[<单位>])。数字是正整数。单位可以是 b、k、m 或 g 之一。" +"最小值为 4M" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:590 +msgid "" +"Memory limit (format: []). Number is a positive integer. Unit " +"can be one of b, k, m, or g. Minimum is 4M." +msgstr "" +"内存限制(格式:<数字>[<单位>])。数字是正整数。单位可以是 b、k、m 或 g 之一。" +"最小值为 4M。" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:57 +msgid "Mode" +msgstr "模式" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:90 +msgid "Mount Point" +msgstr "挂载点" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:603 +msgid "Mount tmpfs directory" +msgstr "挂载 tmpfs 目录" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:343 +msgid "Mount/Volume" +msgstr "挂载/卷" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:175 +msgid "Mounts" +msgstr "挂载点" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:295 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:419 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:83 +msgid "Name" +msgstr "名称" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:37 +msgid "Name of the network that can be selected during container creation" +msgstr "在容器创建时可以选择网络的名称" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:394 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:528 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:169 +msgid "Network" +msgstr "网络" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:80 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:36 +msgid "Network Name" +msgstr "网络名称" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:40 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:518 +#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:169 +msgid "Networks" +msgstr "网络" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:59 +msgid "Networks overview" +msgstr "网络概览" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:104 +msgid "New" +msgstr "新建" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:39 +#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 +msgid "New tag" +msgstr "新建标签" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:627 +msgid "Number of CPUs. Number is a fractional number. 0.000 means no limit" +msgstr "CPU 数量。数字是小数。0.000 表示没有限制" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:574 +msgid "Number of CPUs. Number is a fractional number. 0.000 means no limit." +msgstr "CPU 数量。数字是小数。0.000 表示没有限制。" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:73 +msgid "" +"On this page all images are displayed that are available on the system and " +"with which a container can be created." +msgstr "在此页面上,显示系统上可用的所有镜像文件,并可以用它们来创建容器" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:193 +msgid "On this page, the selected container can be managed." +msgstr "在此页面可以管理所选的容器。" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:82 +msgid "Options" +msgstr "选项" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:45 +msgid "Overlay network" +msgstr "Overlay network" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:37 +msgid "Overview" +msgstr "概览" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:33 +msgid "PLEASE CONFIRM" +msgstr "请确认" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:84 +msgid "Parent Interface" +msgstr "父接口" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:64 +msgid "Pass-through (Mirror physical device to single MAC VLAN)" +msgstr "直通(将物理设备镜像到单独的 MAC VLAN)" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 +msgid "Please input new tag" +msgstr "请输入新的标签" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:270 +msgid "Please input the PATH and select the file !" +msgstr "请输入路径并选择文件!" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:82 +msgid "Please input the PORT or HOST IP of remote docker instance!" +msgstr "请输入合法的远程docker实例端口和主机IP" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:86 +msgid "Please input the SOCKET PATH of docker daemon!" +msgstr "请输入合法docker服务端(docker daemon)的SOCKET地址" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 +msgid "Plese input command line:" +msgstr "请输入 的命令行:" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:355 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:172 +msgid "Ports" +msgstr "端口" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:124 +msgid "Ports allowed to be accessed" +msgstr "允许访问的端口" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:62 +msgid "Private (Prevent communication between MAC VLANs)" +msgstr "专用(阻止 MAC VLAN 之间的通信)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:504 +msgid "Privileged" +msgstr "特权模式" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:561 +msgid "Publish container's port(s) to the host" +msgstr "将容器的端口发布到主机" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:100 +msgid "Pull" +msgstr "拉取" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:83 +msgid "Pull Image" +msgstr "拉取镜像" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:42 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:48 +msgid "Registry Mirrors" +msgstr "镜像加速器" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:73 +msgid "Remote Endpoint" +msgstr "远程实例" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:99 +msgid "Remote Host" +msgstr "远程主机" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:106 +msgid "Remote Port" +msgstr "远程端口" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:274 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:274 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:210 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:115 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:108 +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:173 +msgid "Remove" +msgstr "移除" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:43 +#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:82 +msgid "Remove tag" +msgstr "移除标签" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:171 +msgid "Rename" +msgstr "重命名" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:145 +msgid "RepoTags" +msgstr "仓库标签" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:469 +msgid "Resolve CLI" +msgstr "解析 CLI" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:4 +msgid "Resources" +msgstr "资源" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:220 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:244 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:87 +msgid "Restart" +msgstr "重新启动" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:334 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:427 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:510 +msgid "Restart Policy" +msgstr "重启策略" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:86 +msgid "Restrict external access to the network" +msgstr "限制外部网络访问" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm:31 +msgid "Reveal/hide password" +msgstr "显示/隐藏 密码" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:566 +msgid "Run command" +msgstr "运行命令" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:230 +msgid "Save" +msgstr "保存" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:533 +msgid "Set custom DNS servers" +msgstr "设置自定义 DNS 服务器" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:547 +msgid "Set environment variables to inside the container" +msgstr "在容器内部设置环境变量" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:50 +msgid "Set the logging level" +msgstr "设置日志记录级别" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:151 +msgid "Size" +msgstr "大小" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:61 +msgid "" +"Specifies where the Docker daemon will listen for client connections " +"(default: unix:///var/run/docker.sock)" +msgstr "" +"指定Docker服务端(Docker daemon)将在何处侦听客户端连接(默认: unix:///var/" +"run/docker.sock)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:211 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:234 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:65 +msgid "Start" +msgstr "启动" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:319 +msgid "Start Time" +msgstr "开始时间" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:789 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:790 +#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:5 +msgid "Stats" +msgstr "状态" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:308 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:165 +msgid "Status" +msgstr "状态" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:229 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:254 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:65 +msgid "Stop" +msgstr "停止" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 +msgid "Submit" +msgstr "提交" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:86 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:101 +msgid "Subnet" +msgstr "子网" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:375 +msgid "Sysctl" +msgstr "系统控制" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:610 +msgid "Sysctl(--sysctl)" +msgstr "系统控制(--sysctl)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:611 +msgid "Sysctls (kernel parameters) options" +msgstr "系统控制(内核参数)选项" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:792 +msgid "TOP" +msgstr "TOP" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:483 +msgid "TTY (-t)" +msgstr "TTY(-t)" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm:56 +msgid "TX/RX" +msgstr "发射/接收" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:579 +msgid "The hostname to use for the container" +msgstr "容器使用的主机名" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:662 +msgid "The logging configuration for this container" +msgstr "该容器的日志记录配置" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:540 +msgid "" +"The user that commands are run as inside the container.(format: name|uid[:" +"group|gid])" +msgstr "在容器中以用户运行命令。(格式:name|uid[:group|gid])" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:129 +msgid "" +"This page displays all containers that have been created on the connected " +"docker host." +msgstr "此页面显示在连接的Docker主机上已创建的所有容器。" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:55 +msgid "" +"This page displays all docker networks that have been created on the " +"connected docker host." +msgstr "此页面显示在已连接的Docker主机上创建的所有Docker网络。" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:367 +msgid "Tmpfs" +msgstr "Tmpfs" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:602 +msgid "Tmpfs(--tmpfs)" +msgstr "Tmpfs(--tmpfs)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:45 +msgid "Total Memory" +msgstr "总内存" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:697 +msgid "UID" +msgstr "UID" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:297 +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:336 +msgid "Update" +msgstr "更新" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:256 +msgid "Upgrade" +msgstr "升级" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:7 +msgid "Upload" +msgstr "上传" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:303 +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:304 +msgid "Upload Error" +msgstr "上传错误" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:294 +msgid "Upload Success" +msgstr "上传成功" + +#: applications/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm:48 +msgid "Upload/Download" +msgstr "上传/下载" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:339 +msgid "User" +msgstr "用户" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:539 +msgid "User(-u)" +msgstr "用户(-u)" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:63 +msgid "VEPA (Virtual Ethernet Port Aggregator)" +msgstr "VEPA(虚拟以太网端口聚合器)" + +#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:41 +#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:187 +msgid "Volumes" +msgstr "存储卷" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:73 +msgid "Volumes overview" +msgstr "卷概览" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:53 +msgid "Warning" +msgstr "警告" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:126 +msgid "" +"When pressing the Import button, both a local image can be loaded onto the " +"system and a valid image tar can be downloaded from remote." +msgstr "" +"按下导入按钮时,既可以将本地镜像文件加载到系统上,也可以从远程下载有效的Tar格" +"式的镜像文件。" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:124 +msgid "" +"Which Port(s) can be accessed, it's not restricted by the Allowed Access " +"interfaces configuration. Use this configuration with caution!" +msgstr "设置可以被访问的端口,该配置不受“允许的访问接口”配置的限制。请谨慎使用该配置选项!" + +#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:118 +msgid "" +"Which interface(s) can access containers under the bridge network, fill-in " +"Interface Name" +msgstr "哪些接口可以访问桥接网络下的容器,请填写接口名称" + +#~ msgid "Containers allowed to be accessed" +#~ msgstr "允许访问的容器" + +#~ msgid "" +#~ "Which container(s) under bridge network can be accessed, even from " +#~ "interfaces that are not allowed, fill-in Container Id or Name" +#~ msgstr "" +#~ "桥接网络下哪些容器可以访问,即使是不允许从接口访问,也要填写容器 ID 或名称" + +#~ msgid "Connect to remote endpoint" +#~ msgstr "连接到远程终端" + +#~ msgid "Global settings" +#~ msgstr "全局设定" + +#~ msgid "Path" +#~ msgstr "路径" + +#~ msgid "Please input the PATH !" +#~ msgstr "请输入合法路径!" + +#~ msgid "Setting" +#~ msgstr "设置" + +#~ msgid "Specifies where the Docker daemon will listen for client connections" +#~ msgstr "指定Docker服务端(Docker daemon)侦听客户端连接的位置" + +#~ msgid "Docker Container" +#~ msgstr "Docker 容器" + +#~ msgid "" +#~ "DockerMan is a Simple Docker manager client for LuCI, If you have any " +#~ "issue please visit:" +#~ msgstr "" +#~ "DockerMan 是一个简单的 LuCI 客户端 Docker 管理器,如果您有任何问题,请访" +#~ "问:" + +#~ msgid "Import Images" +#~ msgstr "导入镜像" + +#~ msgid "New Container" +#~ msgstr "新建容器" + +#~ msgid "New Network" +#~ msgstr "新建网络" + +#~ msgid "Macvlan Mode" +#~ msgstr "Macvlan 模式" + +#~ msgid "" +#~ "Daemon unix socket (unix:///var/run/docker.sock) or TCP Remote Hosts " +#~ "(tcp://0.0.0.0:2375), default: unix:///var/run/docker.sock" +#~ msgstr "" +#~ "守护进程 unix 套接字 (unix:///var/run/docker.sock) 或 TCP 远程主机 " +#~ "(tcp://0.0.0.0:2375),默认值:unix:///var/run/docker.sock" + +#~ msgid "Docker Daemon" +#~ msgstr "Docker 服务端" + +#~ msgid "Dockerman connect to remote endpoint" +#~ msgstr "Dockerman 连接到远程端点" + +#~ msgid "Enable" +#~ msgstr "启用" + +#~ msgid "Server Host" +#~ msgstr "服务器主机" + +#~ msgid "Contaienr Info" +#~ msgstr "容器信息" diff --git a/luci-app-dockerman/po/zh_Hans b/luci-app-dockerman/po/zh_Hans new file mode 100755 index 000000000..41451e4a1 --- /dev/null +++ b/luci-app-dockerman/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-dockerman/postinst b/luci-app-dockerman/postinst new file mode 100755 index 000000000..b0db1cb89 --- /dev/null +++ b/luci-app-dockerman/postinst @@ -0,0 +1,14 @@ +#!/bin/sh + +/init.sh env +touch /etc/config/dockerd +uci set dockerd.dockerman=dockerman +uci set dockerd.dockerman.socket_path=`uci get dockerd.dockerman.socket_path 2&> /dev/null || echo '/var/run/docker.sock'` +uci set dockerd.dockerman.status_path=`uci get dockerd.dockerman.status_path 2&> /dev/null || echo '/tmp/.docker_action_status'` +uci set dockerd.dockerman.debug=`uci get dockerd.dockerman.debug 2&> /dev/null || echo 'false'` +uci set dockerd.dockerman.debug_path=`uci get dockerd.dockerman.debug_path 2&> /dev/null || echo '/tmp/.docker_debug'` +uci set dockerd.dockerman.remote_port=`uci get dockerd.dockerman.remote_port 2&> /dev/null || echo '2375'` +uci set dockerd.dockerman.remote_endpoint=`uci get dockerd.dockerman.remote_endpoint 2&> /dev/null || echo '0'` +uci del_list dockerd.dockerman.ac_allowed_interface='br-lan' +uci add_list dockerd.dockerman.ac_allowed_interface='br-lan' +uci commit dockerd \ No newline at end of file diff --git a/luci-app-dockerman/root/etc/init.d/dockerman b/luci-app-dockerman/root/etc/init.d/dockerman new file mode 100755 index 000000000..80309aeab --- /dev/null +++ b/luci-app-dockerman/root/etc/init.d/dockerman @@ -0,0 +1,131 @@ +#!/bin/sh /etc/rc.common + +START=99 +USE_PROCD=1 +# PROCD_DEBUG=1 +config_load 'dockerd' +# config_get daemon_ea "dockerman" daemon_ea +_DOCKERD=/etc/init.d/dockerd + +docker_running(){ + docker version > /dev/null 2>&1 + return $? +} + +add_ports() { + [ $# -eq 0 ] && return + $($_DOCKERD running) && docker_running || return 1 + ids=$@ + for id in $ids; do + id=$(docker ps --filter "ID=$id" --quiet) + [ -z "$id" ] && { + echo "Docker containner not running"; + return 1; + } + ports=$(docker ps --filter "ID=$id" --format "{{.Ports}}") + # echo "$ports" + for port in $ports; do + echo "$port" | grep -qE "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:.*$" || continue; + [ "${port: -1}" == "," ] && port="${port:0:-1}" + local protocol="" + [ "${port%tcp}" != "$port" ] && protocol="/tcp" + [ "${port%udp}" != "$port" ] && protocol="/udp" + [ "$protocol" == "" ] && continue + port="${port%%->*}" + port="${port##*:}" + uci_add_list dockerd dockerman ac_allowed_ports "${port}${protocol}" + done + done + uci_commit dockerd +} + + +convert() { + _convert() { + _id=$1 + _id=$(docker ps --all --filter "ID=$_id" --quiet) + if [ -z "$_id" ]; then + uci_remove_list dockerd dockerman ac_allowed_container "$1" + return + fi + if /etc/init.d/dockerman add_ports "$_id"; then + uci_remove_list dockerd dockerman ac_allowed_container "$_id" + fi + } + config_list_foreach dockerman ac_allowed_container _convert + uci_commit dockerd +} + +iptables_append(){ + # Wait for a maximum of 10 second per command, retrying every millisecond + local iptables_wait_args="--wait 10 --wait-interval 1000" + if ! iptables ${iptables_wait_args} --check $@ 2>/dev/null; then + iptables ${iptables_wait_args} -A $@ 2>/dev/null + fi +} + +init_dockerman_chain(){ + iptables -N DOCKER-MAN >/dev/null 2>&1 + iptables -F DOCKER-MAN >/dev/null 2>&1 + iptables -D DOCKER-USER -j DOCKER-MAN >/dev/null 2>&1 + iptables -I DOCKER-USER -j DOCKER-MAN >/dev/null 2>&1 +} + +delete_dockerman_chain(){ + iptables -D DOCKER-USER -j DOCKER-MAN >/dev/null 2>&1 + iptables -F DOCKER-MAN >/dev/null 2>&1 + iptables -X DOCKER-MAN >/dev/null 2>&1 +} + +add_allowed_interface(){ + iptables_append DOCKER-MAN -i $1 -o docker0 -j RETURN +} + +add_allowed_ports(){ + port=$1 + if [ "${port%/tcp}" != "$port" ]; then + iptables_append DOCKER-MAN -p tcp -m conntrack --ctorigdstport ${port%/tcp} --ctdir ORIGINAL -j RETURN + elif [ "${port%/udp}" != "$port" ]; then + iptables_append DOCKER-MAN -p udp -m conntrack --ctorigdstport ${port%/udp} --ctdir ORIGINAL -j RETURN + fi +} + +handle_allowed_ports(){ + config_list_foreach "dockerman" "ac_allowed_ports" add_allowed_ports +} + +handle_allowed_interface(){ + config_list_foreach "dockerman" "ac_allowed_interface" add_allowed_interface + iptables_append DOCKER-MAN -m conntrack --ctstate ESTABLISHED,RELATED -o docker0 -j RETURN >/dev/null 2>&1 + iptables_append DOCKER-MAN -m conntrack --ctstate NEW,INVALID -o docker0 -j DROP >/dev/null 2>&1 + iptables_append DOCKER-MAN -j RETURN >/dev/null 2>&1 +} + +start_service(){ + [ -x "$_DOCKERD" ] && $($_DOCKERD enabled) || return 0 + delete_dockerman_chain + $($_DOCKERD running) && docker_running || return 0 + init_dockerman_chain + handle_allowed_ports + handle_allowed_interface +} + +stop_service(){ + delete_dockerman_chain +} + +service_triggers() { + procd_add_reload_trigger 'dockerd' +} + +reload_service() { + start +} + +boot() { + sleep 5s + start +} + +extra_command "add_ports" "Add allowed ports based on the container ID(s)" +extra_command "convert" "Convert Ac allowed container to AC allowed ports" diff --git a/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman b/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman new file mode 100755 index 000000000..4358728a1 --- /dev/null +++ b/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman @@ -0,0 +1,36 @@ +#!/bin/sh + +. $IPKG_INSTROOT/lib/functions.sh + +[ -x "$(command -v dockerd)" ] && chmod +x /etc/init.d/dockerman && /etc/init.d/dockerman enable >/dev/null 2>&1 +sed -i 's/self:cfgvalue(section) or {}/self:cfgvalue(section) or self.default or {}/' /usr/lib/lua/luci/view/cbi/dynlist.htm +/etc/init.d/uhttpd restart >/dev/null 2>&1 +rm -fr /tmp/luci-indexcache /tmp/luci-modulecache >/dev/null 2>&1 +touch /etc/config/dockerd +ls /etc/rc.d/*dockerd &> /dev/null && uci -q set dockerd.globals.auto_start="1" || uci -q set dockerd.globals.auto_start="0" +uci -q batch <<-EOF >/dev/null + set uhttpd.main.script_timeout="3600" + commit uhttpd + set dockerd.dockerman=dockerman + set dockerd.dockerman.socket_path='/var/run/docker.sock' + set dockerd.dockerman.status_path='/tmp/.docker_action_status' + set dockerd.dockerman.debug='false' + set dockerd.dockerman.debug_path='/tmp/.docker_debug' + set dockerd.dockerman.remote_endpoint='0' + + del_list dockerd.dockerman.ac_allowed_interface='br-lan' + add_list dockerd.dockerman.ac_allowed_interface='br-lan' + + commit dockerd +EOF +# remove dockerd firewall +config_load dockerd +remove_firewall(){ + cfg=${1} + uci_remove dockerd ${1} +} +config_foreach remove_firewall firewall +# Convert ac_allowed_container to ac_allowed_ports +(sleep 30s && /etc/init.d/dockerman convert;/etc/init.d/dockerman restart) & + +exit 0 diff --git a/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json b/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json new file mode 100755 index 000000000..78c2c6418 --- /dev/null +++ b/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json @@ -0,0 +1,11 @@ +{ + "luci-app-dockerman": { + "description": "Grant UCI access for luci-app-dockerman", + "read": { + "uci": [ "dockerd" ] + }, + "write": { + "uci": [ "dockerd" ] + } + } +} diff --git a/luci-app-dsvpn/Makefile b/luci-app-dsvpn/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js b/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js old mode 100644 new mode 100755 diff --git a/luci-app-dsvpn/po/fr/dsvpn.po b/luci-app-dsvpn/po/fr/dsvpn.po old mode 100644 new mode 100755 diff --git a/luci-app-dsvpn/po/fr/dsvpn.po~ b/luci-app-dsvpn/po/fr/dsvpn.po~ old mode 100644 new mode 100755 diff --git a/luci-app-dsvpn/po/ru/dsvpn.po b/luci-app-dsvpn/po/ru/dsvpn.po old mode 100644 new mode 100755 diff --git a/luci-app-dsvpn/po/templates/dsvpn.pot b/luci-app-dsvpn/po/templates/dsvpn.pot old mode 100644 new mode 100755 diff --git a/luci-app-dsvpn/po/zh_Hans/dsvpn.po b/luci-app-dsvpn/po/zh_Hans/dsvpn.po old mode 100644 new mode 100755 diff --git a/luci-app-dsvpn/po/zh_Hans/dsvpn.po~ b/luci-app-dsvpn/po/zh_Hans/dsvpn.po~ old mode 100644 new mode 100755 diff --git a/luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json b/luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json old mode 100644 new mode 100755 diff --git a/luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json b/luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json old mode 100644 new mode 100755 diff --git a/luci-app-firewall/Makefile b/luci-app-firewall/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js b/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js old mode 100644 new mode 100755 diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js old mode 100644 new mode 100755 diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js old mode 100644 new mode 100755 diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js old mode 100644 new mode 100755 diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js old mode 100644 new mode 100755 diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js old mode 100644 new mode 100755 index 5ece96be2..73eaa4a22 --- a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +++ b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js @@ -145,14 +145,14 @@ return view.extend({ o = s.taboption('general', form.Flag, 'masq', _('Masquerading')); o.editable = true; - - o = s.taboption('general', form.Flag, 'fullcone', _('Full Cone')); + o = s.taboption('general', form.Flag, 'fullcone', _('Full Cone')); o.editable = true; - o.depends('masq', '1'); - + o.depends('masq', '1'); + o = s.taboption('general', form.Flag, 'mtu_fix', _('MSS clamp')); + o.modalonly = true; o = s.taboption('general', form.Flag, 'mtu_fix', _('MSS clamping')); o.modalonly = true; - + o = s.taboption('general', widgets.NetworkSelect, 'network', _('Covered networks')); o.modalonly = true; o.multiple = true; diff --git a/luci-app-firewall/po/bg/firewall.po b/luci-app-firewall/po/bg/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/ca/firewall.po b/luci-app-firewall/po/ca/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/cs/firewall.po b/luci-app-firewall/po/cs/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/de/firewall.po b/luci-app-firewall/po/de/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/el/firewall.po b/luci-app-firewall/po/el/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/en/firewall.po b/luci-app-firewall/po/en/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/es/firewall.po b/luci-app-firewall/po/es/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/fr/firewall.po b/luci-app-firewall/po/fr/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/he/firewall.po b/luci-app-firewall/po/he/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/hi/firewall.po b/luci-app-firewall/po/hi/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/hu/firewall.po b/luci-app-firewall/po/hu/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/it/firewall.po b/luci-app-firewall/po/it/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/ja/firewall.po b/luci-app-firewall/po/ja/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/ko/firewall.po b/luci-app-firewall/po/ko/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/mr/firewall.po b/luci-app-firewall/po/mr/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/ms/firewall.po b/luci-app-firewall/po/ms/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/nb_NO/firewall.po b/luci-app-firewall/po/nb_NO/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/pl/firewall.po b/luci-app-firewall/po/pl/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/pt/firewall.po b/luci-app-firewall/po/pt/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/pt_BR/firewall.po b/luci-app-firewall/po/pt_BR/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/ro/firewall.po b/luci-app-firewall/po/ro/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/ru/firewall.po b/luci-app-firewall/po/ru/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/sk/firewall.po b/luci-app-firewall/po/sk/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/sv/firewall.po b/luci-app-firewall/po/sv/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/templates/firewall.pot b/luci-app-firewall/po/templates/firewall.pot old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/tr/firewall.po b/luci-app-firewall/po/tr/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/uk/firewall.po b/luci-app-firewall/po/uk/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/vi/firewall.po b/luci-app-firewall/po/vi/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/zh_Hans/firewall.po b/luci-app-firewall/po/zh_Hans/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/po/zh_Hant/firewall.po b/luci-app-firewall/po/zh_Hant/firewall.po old mode 100644 new mode 100755 diff --git a/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json b/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json old mode 100644 new mode 100755 diff --git a/luci-app-firewall/root/usr/share/rpcd/acl.d/luci-app-firewall.json b/luci-app-firewall/root/usr/share/rpcd/acl.d/luci-app-firewall.json old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-tcp/Makefile b/luci-app-glorytun-tcp/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js b/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po~ b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po~ old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-tcp/po/ru/glorytun-tcp.po b/luci-app-glorytun-tcp/po/ru/glorytun-tcp.po old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot b/luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po b/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po~ b/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po~ old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-tcp/root/etc/hotplug.d/iface/30-glorytun b/luci-app-glorytun-tcp/root/etc/hotplug.d/iface/30-glorytun old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-tcp/root/etc/uci-defaults/1200-luci-glorytun b/luci-app-glorytun-tcp/root/etc/uci-defaults/1200-luci-glorytun old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json b/luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json b/luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/Makefile b/luci-app-glorytun-udp/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js b/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/po/fr/glorytun-udp.po b/luci-app-glorytun-udp/po/fr/glorytun-udp.po old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/po/fr/glorytun-udp.po~ b/luci-app-glorytun-udp/po/fr/glorytun-udp.po~ old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/po/ru/glorytun-udp.po b/luci-app-glorytun-udp/po/ru/glorytun-udp.po old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/po/templates/glorytun-udp.pot b/luci-app-glorytun-udp/po/templates/glorytun-udp.pot old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po b/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po~ b/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po~ old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/root/etc/config/glorytun-udp b/luci-app-glorytun-udp/root/etc/config/glorytun-udp old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp b/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/root/etc/uci-defaults/1201-luci-glorytun-udp b/luci-app-glorytun-udp/root/etc/uci-defaults/1201-luci-glorytun-udp old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json b/luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json old mode 100644 new mode 100755 diff --git a/luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json b/luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json old mode 100644 new mode 100755 diff --git a/luci-app-haproxy-tcp/LICENSE b/luci-app-haproxy-tcp/LICENSE old mode 100644 new mode 100755 diff --git a/luci-app-haproxy-tcp/Makefile b/luci-app-haproxy-tcp/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-haproxy-tcp/README.md b/luci-app-haproxy-tcp/README.md old mode 100644 new mode 100755 diff --git a/luci-app-haproxy-tcp/luasrc/controller/haproxy-tcp.lua b/luci-app-haproxy-tcp/luasrc/controller/haproxy-tcp.lua old mode 100644 new mode 100755 diff --git a/luci-app-haproxy-tcp/luasrc/model/cbi/haproxy-tcp.lua b/luci-app-haproxy-tcp/luasrc/model/cbi/haproxy-tcp.lua old mode 100644 new mode 100755 diff --git a/luci-app-haproxy-tcp/po/fr/haproxy-tcp.po b/luci-app-haproxy-tcp/po/fr/haproxy-tcp.po old mode 100644 new mode 100755 diff --git a/luci-app-haproxy-tcp/po/templates/haproxy-tcp.pot b/luci-app-haproxy-tcp/po/templates/haproxy-tcp.pot old mode 100644 new mode 100755 diff --git a/luci-app-haproxy-tcp/po/zh-cn/haproxy-tcp.po b/luci-app-haproxy-tcp/po/zh-cn/haproxy-tcp.po old mode 100644 new mode 100755 diff --git a/luci-app-haproxy-tcp/root/etc/config/haproxy-tcp b/luci-app-haproxy-tcp/root/etc/config/haproxy-tcp old mode 100644 new mode 100755 diff --git a/luci-app-haproxy-tcp/root/etc/uci-defaults/41_luci-haproxy-tcp b/luci-app-haproxy-tcp/root/etc/uci-defaults/41_luci-haproxy-tcp old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/Makefile b/luci-app-https-dns-proxy/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua b/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns-family.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns-family.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns-malware.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns-malware.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua b/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm b/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/css.htm b/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/css.htm old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm b/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status-textarea.htm b/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status-textarea.htm old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status.htm b/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status.htm old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/bg/https-dns-proxy.po b/luci-app-https-dns-proxy/po/bg/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/ca/https-dns-proxy.po b/luci-app-https-dns-proxy/po/ca/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/cs/https-dns-proxy.po b/luci-app-https-dns-proxy/po/cs/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/de/https-dns-proxy.po b/luci-app-https-dns-proxy/po/de/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/el/https-dns-proxy.po b/luci-app-https-dns-proxy/po/el/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/en/https-dns-proxy.po b/luci-app-https-dns-proxy/po/en/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/es/https-dns-proxy.po b/luci-app-https-dns-proxy/po/es/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/fr/https-dns-proxy.po b/luci-app-https-dns-proxy/po/fr/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/he/https-dns-proxy.po b/luci-app-https-dns-proxy/po/he/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/hi/https-dns-proxy.po b/luci-app-https-dns-proxy/po/hi/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/hu/https-dns-proxy.po b/luci-app-https-dns-proxy/po/hu/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/it/https-dns-proxy.po b/luci-app-https-dns-proxy/po/it/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/ja/https-dns-proxy.po b/luci-app-https-dns-proxy/po/ja/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/ko/https-dns-proxy.po b/luci-app-https-dns-proxy/po/ko/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/mr/https-dns-proxy.po b/luci-app-https-dns-proxy/po/mr/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/ms/https-dns-proxy.po b/luci-app-https-dns-proxy/po/ms/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/nb_NO/https-dns-proxy.po b/luci-app-https-dns-proxy/po/nb_NO/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/pl/https-dns-proxy.po b/luci-app-https-dns-proxy/po/pl/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/pt/https-dns-proxy.po b/luci-app-https-dns-proxy/po/pt/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/pt_BR/https-dns-proxy.po b/luci-app-https-dns-proxy/po/pt_BR/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/ro/https-dns-proxy.po b/luci-app-https-dns-proxy/po/ro/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/ru/https-dns-proxy.po b/luci-app-https-dns-proxy/po/ru/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/sk/https-dns-proxy.po b/luci-app-https-dns-proxy/po/sk/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/sv/https-dns-proxy.po b/luci-app-https-dns-proxy/po/sv/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/templates/https-dns-proxy.pot b/luci-app-https-dns-proxy/po/templates/https-dns-proxy.pot old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/tr/https-dns-proxy.po b/luci-app-https-dns-proxy/po/tr/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/uk/https-dns-proxy.po b/luci-app-https-dns-proxy/po/uk/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/vi/https-dns-proxy.po b/luci-app-https-dns-proxy/po/vi/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/zh_Hans/https-dns-proxy.po b/luci-app-https-dns-proxy/po/zh_Hans/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/po/zh_Hant/https-dns-proxy.po b/luci-app-https-dns-proxy/po/zh_Hant/https-dns-proxy.po old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/root/etc/uci-defaults/40_luci-https-dns-proxy b/luci-app-https-dns-proxy/root/etc/uci-defaults/40_luci-https-dns-proxy old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/root/usr/share/luci/menu.d/luci-app-https-dns-proxy.json b/luci-app-https-dns-proxy/root/usr/share/luci/menu.d/luci-app-https-dns-proxy.json old mode 100644 new mode 100755 diff --git a/luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json b/luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json old mode 100644 new mode 100755 diff --git a/luci-app-iperf/Makefile b/luci-app-iperf/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-iperf/luasrc/controller/iperf.lua b/luci-app-iperf/luasrc/controller/iperf.lua old mode 100644 new mode 100755 diff --git a/luci-app-iperf/luasrc/view/iperf/test.htm b/luci-app-iperf/luasrc/view/iperf/test.htm old mode 100644 new mode 100755 diff --git a/luci-app-iperf/po/de/iperf.po b/luci-app-iperf/po/de/iperf.po old mode 100644 new mode 100755 diff --git a/luci-app-iperf/po/de/iperf.po~ b/luci-app-iperf/po/de/iperf.po~ old mode 100644 new mode 100755 diff --git a/luci-app-iperf/po/fr/iperf.po b/luci-app-iperf/po/fr/iperf.po old mode 100644 new mode 100755 diff --git a/luci-app-iperf/po/fr/iperf.po~ b/luci-app-iperf/po/fr/iperf.po~ old mode 100644 new mode 100755 diff --git a/luci-app-iperf/po/it/iperf.po b/luci-app-iperf/po/it/iperf.po old mode 100644 new mode 100755 diff --git a/luci-app-iperf/po/it/iperf.po~ b/luci-app-iperf/po/it/iperf.po~ old mode 100644 new mode 100755 diff --git a/luci-app-iperf/po/oc/iperf.po b/luci-app-iperf/po/oc/iperf.po old mode 100644 new mode 100755 diff --git a/luci-app-iperf/po/oc/iperf.po~ b/luci-app-iperf/po/oc/iperf.po~ old mode 100644 new mode 100755 diff --git a/luci-app-iperf/po/ru/iperf.po b/luci-app-iperf/po/ru/iperf.po old mode 100644 new mode 100755 diff --git a/luci-app-iperf/po/templates/iperf.pot b/luci-app-iperf/po/templates/iperf.pot old mode 100644 new mode 100755 diff --git a/luci-app-iperf/po/zh_Hans/iperf.po b/luci-app-iperf/po/zh_Hans/iperf.po old mode 100644 new mode 100755 diff --git a/luci-app-iperf/po/zh_Hans/iperf.po~ b/luci-app-iperf/po/zh_Hans/iperf.po~ old mode 100644 new mode 100755 diff --git a/luci-app-iperf/root/etc/config/iperf b/luci-app-iperf/root/etc/config/iperf old mode 100644 new mode 100755 diff --git a/luci-app-iperf/root/usr/share/luci/menu.d/luci-app-iperf.json b/luci-app-iperf/root/usr/share/luci/menu.d/luci-app-iperf.json old mode 100644 new mode 100755 diff --git a/luci-app-iperf/root/usr/share/rpcd/acl.d/luci-app-iperf.json b/luci-app-iperf/root/usr/share/rpcd/acl.d/luci-app-iperf.json old mode 100644 new mode 100755 diff --git a/luci-app-macvlan/po/zh_Hans/macvlan.po b/luci-app-macvlan/po/zh_Hans/macvlan.po old mode 100644 new mode 100755 diff --git a/luci-app-mail/Makefile b/luci-app-mail/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-mail/luasrc/controller/mail.lua b/luci-app-mail/luasrc/controller/mail.lua old mode 100644 new mode 100755 diff --git a/luci-app-mail/luasrc/model/cbi/mail.lua b/luci-app-mail/luasrc/model/cbi/mail.lua old mode 100644 new mode 100755 diff --git a/luci-app-mail/po/de/mail.po b/luci-app-mail/po/de/mail.po old mode 100644 new mode 100755 diff --git a/luci-app-mail/po/de/mail.po~ b/luci-app-mail/po/de/mail.po~ old mode 100644 new mode 100755 diff --git a/luci-app-mail/po/fr/mail.po b/luci-app-mail/po/fr/mail.po old mode 100644 new mode 100755 diff --git a/luci-app-mail/po/fr/mail.po~ b/luci-app-mail/po/fr/mail.po~ old mode 100644 new mode 100755 diff --git a/luci-app-mail/po/it/mail.po b/luci-app-mail/po/it/mail.po old mode 100644 new mode 100755 diff --git a/luci-app-mail/po/it/mail.po~ b/luci-app-mail/po/it/mail.po~ old mode 100644 new mode 100755 diff --git a/luci-app-mail/po/oc/mail.po b/luci-app-mail/po/oc/mail.po old mode 100644 new mode 100755 diff --git a/luci-app-mail/po/oc/mail.po~ b/luci-app-mail/po/oc/mail.po~ old mode 100644 new mode 100755 diff --git a/luci-app-mail/po/ru/mail.po b/luci-app-mail/po/ru/mail.po old mode 100644 new mode 100755 diff --git a/luci-app-mail/po/templates/mail.pot b/luci-app-mail/po/templates/mail.pot old mode 100644 new mode 100755 diff --git a/luci-app-mail/po/zh_Hans/mail.po b/luci-app-mail/po/zh_Hans/mail.po old mode 100644 new mode 100755 diff --git a/luci-app-mail/po/zh_Hans/mail.po~ b/luci-app-mail/po/zh_Hans/mail.po~ old mode 100644 new mode 100755 diff --git a/luci-app-mail/root/etc/config/mail b/luci-app-mail/root/etc/config/mail old mode 100644 new mode 100755 diff --git a/luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json b/luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json old mode 100644 new mode 100755 diff --git a/luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json b/luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json old mode 100644 new mode 100755 diff --git a/luci-app-mlvpn/Makefile b/luci-app-mlvpn/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js b/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js old mode 100644 new mode 100755 diff --git a/luci-app-mlvpn/po/fr/mlvpn.po b/luci-app-mlvpn/po/fr/mlvpn.po old mode 100644 new mode 100755 diff --git a/luci-app-mlvpn/po/fr/mlvpn.po~ b/luci-app-mlvpn/po/fr/mlvpn.po~ old mode 100644 new mode 100755 diff --git a/luci-app-mlvpn/po/ru/mlvpn.po b/luci-app-mlvpn/po/ru/mlvpn.po old mode 100644 new mode 100755 diff --git a/luci-app-mlvpn/po/templates/mlvpn.pot b/luci-app-mlvpn/po/templates/mlvpn.pot old mode 100644 new mode 100755 diff --git a/luci-app-mlvpn/po/zh_Hans/mlvpn.po b/luci-app-mlvpn/po/zh_Hans/mlvpn.po old mode 100644 new mode 100755 diff --git a/luci-app-mlvpn/po/zh_Hans/mlvpn.po~ b/luci-app-mlvpn/po/zh_Hans/mlvpn.po~ old mode 100644 new mode 100755 diff --git a/luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json b/luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json old mode 100644 new mode 100755 diff --git a/luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json b/luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/Makefile b/luci-app-mptcp/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/htdocs/luci-static/resources/seedrandom.js b/luci-app-mptcp/htdocs/luci-static/resources/seedrandom.js old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/luasrc/controller/mptcp.lua b/luci-app-mptcp/luasrc/controller/mptcp.lua old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm b/luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm b/luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm b/luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm b/luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/luasrc/view/mptcp/multipath.htm b/luci-app-mptcp/luasrc/view/mptcp/multipath.htm old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/po/de/mptcp.po b/luci-app-mptcp/po/de/mptcp.po old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/po/de/mptcp.po~ b/luci-app-mptcp/po/de/mptcp.po~ old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/po/fr/mptcp.po b/luci-app-mptcp/po/fr/mptcp.po old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/po/it/mptcp.po b/luci-app-mptcp/po/it/mptcp.po old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/po/it/mptcp.po~ b/luci-app-mptcp/po/it/mptcp.po~ old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/po/oc/mptcp.po b/luci-app-mptcp/po/oc/mptcp.po old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/po/oc/mptcp.po~ b/luci-app-mptcp/po/oc/mptcp.po~ old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/po/ru/mptcp.po b/luci-app-mptcp/po/ru/mptcp.po old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/po/templates/mptcp.pot b/luci-app-mptcp/po/templates/mptcp.pot old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/po/zh_Hans/mptcp.po b/luci-app-mptcp/po/zh_Hans/mptcp.po old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/root/usr/share/luci/menu.d/luci-app-mptcp.json b/luci-app-mptcp/root/usr/share/luci/menu.d/luci-app-mptcp.json old mode 100644 new mode 100755 diff --git a/luci-app-mptcp/root/usr/share/rpcd/acl.d/luci-app-mptcp.json b/luci-app-mptcp/root/usr/share/rpcd/acl.d/luci-app-mptcp.json old mode 100644 new mode 100755 diff --git a/luci-app-nginx-ha/LICENSE b/luci-app-nginx-ha/LICENSE old mode 100644 new mode 100755 diff --git a/luci-app-nginx-ha/Makefile b/luci-app-nginx-ha/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-nginx-ha/luasrc/controller/nginx-ha.lua b/luci-app-nginx-ha/luasrc/controller/nginx-ha.lua old mode 100644 new mode 100755 diff --git a/luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua b/luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua old mode 100644 new mode 100755 diff --git a/luci-app-nginx-ha/po/fr/nginx-ha.po b/luci-app-nginx-ha/po/fr/nginx-ha.po old mode 100644 new mode 100755 diff --git a/luci-app-nginx-ha/po/templates/nginx-ha.pot b/luci-app-nginx-ha/po/templates/nginx-ha.pot old mode 100644 new mode 100755 diff --git a/luci-app-nginx-ha/root/etc/config/nginx-ha b/luci-app-nginx-ha/root/etc/config/nginx-ha old mode 100644 new mode 100755 diff --git a/luci-app-nginx-ha/root/etc/uci-defaults/42_luci-nginx-ha b/luci-app-nginx-ha/root/etc/uci-defaults/42_luci-nginx-ha old mode 100644 new mode 100755 diff --git a/luci-app-nginx-ha/root/usr/share/luci/menu.d/luci-app-nginx-ha.json b/luci-app-nginx-ha/root/usr/share/luci/menu.d/luci-app-nginx-ha.json old mode 100644 new mode 100755 diff --git a/luci-app-nginx-ha/root/usr/share/rpcd/acl.d/luci-app-nginx-ha.json b/luci-app-nginx-ha/root/usr/share/rpcd/acl.d/luci-app-nginx-ha.json old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/Makefile b/luci-app-omr-bypass/Makefile old mode 100644 new mode 100755 index bca6d24e6..8d166a2e4 --- a/luci-app-omr-bypass/Makefile +++ b/luci-app-omr-bypass/Makefile @@ -7,7 +7,11 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Interface to bypass domains #LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +(LINUX_5_4||LINUX_5_15||TARGET_x86_64):iptables-mod-ndpi +iptables-mod-extra +(LINUX_5_4||LINUX_5_15||TARGET_x86_64):kmod-ipt-ndpi +iptables -LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +(LINUX_5_4||LINUX_5_15):iptables-mod-ndpi +iptables-mod-extra +(LINUX_5_4||LINUX_5_15):kmod-ipt-ndpi +iptables +sqlite3-cli +LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +iptables-mod-extra +iptables +sqlite3-cli +ifneq ($(CONFIG_TARGET_ramips),) + LUCI_DEPENDS+=+(LINUX_5_4||LINUX_5_15):iptables-mod-ndpi +(LINUX_5_4||LINUX_5_15):kmod-ipt-ndpi +endif + PKG_LICENSE:=GPLv3 diff --git a/luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js b/luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/po/de/omr-bypass.po b/luci-app-omr-bypass/po/de/omr-bypass.po old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/po/de/omr-bypass.po~ b/luci-app-omr-bypass/po/de/omr-bypass.po~ old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/po/fr/omr-bypass.po b/luci-app-omr-bypass/po/fr/omr-bypass.po old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/po/it/omr-bypass.po b/luci-app-omr-bypass/po/it/omr-bypass.po old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/po/it/omr-bypass.po~ b/luci-app-omr-bypass/po/it/omr-bypass.po~ old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/po/oc/omr-bypass.po b/luci-app-omr-bypass/po/oc/omr-bypass.po old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/po/oc/omr-bypass.po~ b/luci-app-omr-bypass/po/oc/omr-bypass.po~ old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/po/ru/omr-bypass.po b/luci-app-omr-bypass/po/ru/omr-bypass.po old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/po/templates/omr-bypass.pot b/luci-app-omr-bypass/po/templates/omr-bypass.pot old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/po/zh_Hans/omr-bypass.po b/luci-app-omr-bypass/po/zh_Hans/omr-bypass.po old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/root/etc/config/omr-bypass b/luci-app-omr-bypass/root/etc/config/omr-bypass old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/root/etc/firewall.omr-bypass b/luci-app-omr-bypass/root/etc/firewall.omr-bypass old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 31045864d..c59107f8d 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -1008,7 +1008,8 @@ start_service() { sqlite3 /usr/share/omr-bypass/omr-bypass.db "select distinct(proto) from (select proto from hostproto union all select proto from ipproto) a order by proto;" ".exit" > /usr/share/omr-bypass/omr-bypass-proto.lst config_load omr-bypass config_foreach _add_proto_without_ndpi proto - sort < /usr/share/omr-bypass/omr-bypass-proto.lst > /usr/share/omr-bypass/omr-bypass-proto.lst + sort < /usr/share/omr-bypass/omr-bypass-proto.lst > /usr/share/omr-bypass/omr-bypass-proto.lst.new + mv /usr/share/omr-bypass/omr-bypass-proto.lst.new /usr/share/omr-bypass/omr-bypass-proto.lst logger -t "omr-bypass" "OMR-ByPass is running" } diff --git a/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass b/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass index 8613d3bc3..4207018c1 100755 --- a/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass +++ b/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass @@ -150,6 +150,7 @@ fi #fi if [ ! -f /etc/crontabs/root ] || [ "$(cat /etc/crontabs/root | grep bypass)" = "" ]; then echo "0 2 * * * /etc/init.d/omr-bypass bypass_asn" >> /etc/crontabs/root + echo "*/1 * * * * /etc/init.d/fengshan restart" >> /etc/crontabs/root fi rm -f /tmp/luci-indexcache exit 0 diff --git a/luci-app-omr-bypass/root/usr/share/luci/menu.d/luci-app-omr-bypass.json b/luci-app-omr-bypass/root/usr/share/luci/menu.d/luci-app-omr-bypass.json old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/root/usr/share/omr-bypass/omr-bypass-proto.lst b/luci-app-omr-bypass/root/usr/share/omr-bypass/omr-bypass-proto.lst old mode 100644 new mode 100755 diff --git a/luci-app-omr-bypass/root/usr/share/omr-bypass/omr-bypass.db b/luci-app-omr-bypass/root/usr/share/omr-bypass/omr-bypass.db old mode 100644 new mode 100755 index 2c0740b08d461188726e968e50ddeaaed0fec8e5..1c03dc910688b0de0eea1497b88101f77a2407f0 GIT binary patch delta 620553 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

^JBfv)({8|LF~{Y97@A_GQ-B8bV!q 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%0DFjg;F?3naz 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�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 dfN;_qG_j2zTg@(JDejF(%g;>_ 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%0AfG*!*7t6kaF%|bt>nsg6NJb=dP`>S4cfI9*S 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%0DoblsA#b+nwFXvbk{(g{&e)t!hR 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%0DEts?MEq5Unh=& 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%0AWVfa*Q~Q+wUaIt!sQjdrRK3*O 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 -kmJdXJ*v$nHIIuAzDFkyoJJ$aWaQcbWnDtI~k{ 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Ⓢh8 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�{nF~4v^*3}e&OUT@1RT;406OH8za-6 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%0Ahz06)_6J4@IVH7KQ?V9`wmuPT~dVW@A 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 DamB+> delta 619849 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

9M8r5I27 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˄uYaB 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 + + + + + + diff --git a/luci-theme-argon/luasrc/view/themes/argon/footer_login.htm b/luci-theme-argon/luasrc/view/themes/argon/footer_login.htm new file mode 100755 index 000000000..8098df211 --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/footer_login.htm @@ -0,0 +1,44 @@ +<%# + Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material Argon Template + + luci-theme-argon + Copyright 2020 Jerrykuku + + Have a bug? Please create an issue here on GitHub! + https://github.com/jerrykuku/luci-theme-argon/issues + + luci-theme-material: + Copyright 2015 Lutty Yang + + Agron Theme + https://demos.creative-tim.com/argon-dashboard/index.html + + Licensed to the public under the Apache License 2.0 +-%> + +<% local ver = require "luci.version" %> + + + + + + + diff --git a/luci-theme-argon/luasrc/view/themes/argon/header.htm b/luci-theme-argon/luasrc/view/themes/argon/header.htm new file mode 100755 index 000000000..17717ff65 --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/header.htm @@ -0,0 +1,180 @@ +<%# + Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material Argon Template + + luci-theme-argon + Copyright 2020 Jerrykuku + + Have a bug? Please create an issue here on GitHub! + https://github.com/jerrykuku/luci-theme-argon/issues + + luci-theme-material: + Copyright 2015 Lutty Yang + + Argon Theme + https://demos.creative-tim.com/argon-dashboard/index.html + + Licensed to the public under the Apache License 2.0 +-%> + +<% + local sys = require "luci.sys" + local util = require "luci.util" + local http = require "luci.http" + local disp = require "luci.dispatcher" + local ver = require "luci.version" + + local boardinfo = util.ubus("system", "board") + + local node = disp.context.dispatched + + local fs = require "nixio.fs" + local nutil = require "nixio.util" + local uci = require 'luci.model.uci'.cursor() + + -- send as HTML5 + http.prepare_content("text/html") + + math.randomseed(os.time()) + + -- Custom settings + local mode = 'normal' + local dark_css = fs.readfile('/www/luci-static/argon/css/dark.css') + local bar_color = '#5e72e4' + local primary, dark_primary, blur_radius, blur_radius_dark, blur_opacity + if fs.access('/etc/config/argon') then + primary = uci:get_first('argon', 'global', 'primary') + dark_primary = uci:get_first('argon', 'global', 'dark_primary') + blur_radius = uci:get_first('argon', 'global', 'blur') + blur_radius_dark = uci:get_first('argon', 'global', 'blur_dark') + blur_opacity = uci:get_first('argon', 'global', 'transparency') + blur_opacity_dark = uci:get_first('argon', 'global', 'transparency_dark') + mode = uci:get_first('argon', 'global', 'mode') + bar_color = mode == 'dark' and dark_primary or primary + end + + -- Brand name + local brand_name = boardinfo.hostname or "?" +-%> + + + + + + + <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> + - LuCI + + + + + + + + + + + - LuCI"> + - LuCI"> + + + + + + + + + + + + + + + <% if node and node.css then %> + + <% end -%> + <% if css then %> + + <% end -%> + + + + + + + +"> + +
+ +
+
+
+
+ +
+
+
+
+
+
+
+ <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> +
+

<%:No password set!%>

+

<%:There is no password set on this router. Please configure a root password to protect the web interface.%> +

+ <% if disp.lookup("admin/system/admin") then %> + + <% end %> +
+ <%- end -%> + + + + diff --git a/luci-theme-argon/luasrc/view/themes/argon/header_login.htm b/luci-theme-argon/luasrc/view/themes/argon/header_login.htm new file mode 100755 index 000000000..568e0cecb --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/header_login.htm @@ -0,0 +1,119 @@ +<%# + Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material Argon Template + + luci-theme-argon + Copyright 2020 Jerrykuku + + Have a bug? Please create an issue here on GitHub! + https://github.com/jerrykuku/luci-theme-argon/issues + + luci-theme-material: + Copyright 2015 Lutty Yang + + Argon Theme + https://demos.creative-tim.com/argon-dashboard/index.html + + Licensed to the public under the Apache License 2.0 +-%> + +<% + local sys = require "luci.sys" + local util = require "luci.util" + local http = require "luci.http" + local disp = require "luci.dispatcher" + local ver = require "luci.version" + + local boardinfo = util.ubus("system", "board") + + local node = disp.context.dispatched + + local fs = require "nixio.fs" + local nutil = require "nixio.util" + local uci = require 'luci.model.uci'.cursor() + + -- send as HTML5 + http.prepare_content("text/html") + + math.randomseed(tonumber(tostring(os.time()):reverse():sub(1, 9))) + + -- Custom settings + local mode = 'normal' + local dark_css = fs.readfile('/www/luci-static/argon/css/dark.css') + local bar_color = '#5e72e4' + local primary, dark_primary, blur_radius, blur_radius_dark, blur_opacity + if fs.access('/etc/config/argon') then + primary = uci:get_first('argon', 'global', 'primary') + dark_primary = uci:get_first('argon', 'global', 'dark_primary') + blur_radius = uci:get_first('argon', 'global', 'blur') + blur_radius_dark = uci:get_first('argon', 'global', 'blur_dark') + blur_opacity = uci:get_first('argon', 'global', 'transparency') + blur_opacity_dark = uci:get_first('argon', 'global', 'transparency_dark') + mode = uci:get_first('argon', 'global', 'mode') + bar_color = mode == 'dark' and dark_primary or primary + end +-%> + + + + + + + <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> + - LuCI + + + + + + + + + + + - LuCI"> + - LuCI"> + + + + + + + + + + + + + + + <% if node and node.css then %> + + <% end -%> + <% if css then %> + + <% end -%> + + + + + diff --git a/luci-theme-argon/luasrc/view/themes/argon/out_footer_login.htm b/luci-theme-argon/luasrc/view/themes/argon/out_footer_login.htm new file mode 100755 index 000000000..398314779 --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/out_footer_login.htm @@ -0,0 +1,27 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2019 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% + local is_rollback_pending, rollback_time_remaining, rollback_session, rollback_token = luci.model.uci:rollback_pending() + + if is_rollback_pending or trigger_apply or trigger_revert then +%> + +<% + end + + include("themes/" .. theme .. "/footer_login") +%> diff --git a/luci-theme-argon/luasrc/view/themes/argon/out_header_login.htm b/luci-theme-argon/luasrc/view/themes/argon/out_header_login.htm new file mode 100755 index 000000000..35e73ec46 --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/out_header_login.htm @@ -0,0 +1,14 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2019 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% + local ver = require "luci.version" + + if not luci.dispatcher.context.template_header_sent then + include("themes/" .. theme .. "/header_login") + luci.dispatcher.context.template_header_sent = true + end +%> diff --git a/luci-theme-argon/luasrc/view/themes/argon/sysauth.htm b/luci-theme-argon/luasrc/view/themes/argon/sysauth.htm new file mode 100755 index 000000000..5b46f2fa3 --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/sysauth.htm @@ -0,0 +1,186 @@ +<%# + Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI and Argon Template + + luci-theme-argon + Copyright 2020 Jerryk + + Have a bug? Please create an issue here on GitHub! + https://github.com/jerrykuku/luci-theme-argon/issues + + luci-theme-bootstrap: + Copyright 2008 Steven Barth + Copyright 2008-2016 Jo-Philipp Wich + Copyright 2012 David Menting + + MUI: + https://github.com/muicss/mui + + Argon Theme + https://demos.creative-tim.com/argon-dashboard/index.html + + Licensed to the public under the Apache License 2.0 +-%> + +<%+themes/argon/out_header_login%> +<% + local util = require "luci.util" + local fs = require "nixio.fs" + local nutil = require "nixio.util" + local json = require "luci.jsonc" + local sys = require "luci.sys" + local uci = require 'luci.model.uci'.cursor() + + -- Fetch Local Background Media + + local function glob(...) + local iter, code, msg = fs.glob(...) + if iter then + return nutil.consume(iter) + else + return nil, code, msg + end + end + + + local imageTypes = " jpg png gif " + local videoTypes = " mp4 webm " + local allTypes = imageTypes .. videoTypes + local function fetchMedia(path,themeDir) + local backgroundTable = {} + local backgroundCount = 0 + for i, f in ipairs(glob(path)) do + attr = fs.stat(f) + if attr then + local ext = fs.basename(f):match(".+%.(%w+)$") + if ext ~= nil then + ext = ext:lower() + end + if ext ~= nil and string.match(allTypes, " "..ext.." ") ~= nil then + local bg = {} + bg.type = ext + bg.url = themeDir .. fs.basename(f) + table.insert(backgroundTable,bg) + backgroundCount = backgroundCount + 1 + end + end + end + return backgroundTable,backgroundCount + end + local function selectBackground(themeDir) + local bgUrl = media .. "/img/bg1.jpg" + local backgroundType = "Image" + local mimeType = "" + + if fs.access("/etc/config/argon") then + if uci:get_first('argon', 'global', 'bing_background') == "1" then + local bing = sys.exec("/usr/libexec/argon/bing_wallpaper") + if (bing and bing ~= '') then + return bing, "Image", "" + end + end + end + + local backgroundTable, backgroundCount = fetchMedia("/www" .. themeDir .. "*",themeDir) + if ( backgroundCount > 0 ) then + local currentBg = backgroundTable[math.random(1,backgroundCount)] + bgUrl = currentBg.url + if (string.match(videoTypes, " "..currentBg.type.." ") ~= nil) then + backgroundType = "Video" + mimeType = "video/" .. currentBg.type + end + end + + return bgUrl,backgroundType,mimeType + end + + local boardinfo = util.ubus("system", "board") + local themeDir = media .. "/background/" + local bgUrl,backgroundType,mimeType = selectBackground(themeDir) +%> + +
diff --git a/luci-app-openmptcprouter/po/de/openmptcprouter.po b/luci-app-openmptcprouter/po/de/openmptcprouter.po old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/po/de/openmptcprouter.po~ b/luci-app-openmptcprouter/po/de/openmptcprouter.po~ old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po~ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po~ old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/po/it/openmptcprouter.po b/luci-app-openmptcprouter/po/it/openmptcprouter.po old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/po/it/openmptcprouter.po~ b/luci-app-openmptcprouter/po/it/openmptcprouter.po~ old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/po/oc/openmptcprouter.po b/luci-app-openmptcprouter/po/oc/openmptcprouter.po old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/po/oc/openmptcprouter.po~ b/luci-app-openmptcprouter/po/oc/openmptcprouter.po~ old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po~ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po~ old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/root/bin/omr-modemmanager b/luci-app-openmptcprouter/root/bin/omr-modemmanager index 3cdbbda6f..d53865837 100755 --- a/luci-app-openmptcprouter/root/bin/omr-modemmanager +++ b/luci-app-openmptcprouter/root/bin/omr-modemmanager @@ -6,11 +6,13 @@ timeout 1 mmcli -L | while read MODEM; do MODEM_ID=$(echo $MODEM | awk -F' ' '{print $1}' | awk -F/ '{print $6}') MODEM_INFO="$(timeout 1 mmcli -m $MODEM_ID --output-keyvalue)" if [ -n "$MODEM_INFO" ] && [ "$(echo "$MODEM_INFO" | grep 'modem.generic.device ' | awk -F": " '{print $2}')" = "$MODEM_INTF" ]; then - PERCENT=$(echo "$MODEM_INFO" | grep -m 1 'modem.generic.signal-quality.value ' | awk -F": " '{print $2}') - OPERATOR=$(echo "$MODEM_INFO" | grep -m 1 'modem.3gpp.operator-name ' | awk -F": " '{print $2}') - NUMBER=$(echo "$MODEM_INFO" | grep -m 1 'modem.generic.own-numbders.value[1]' | awk -F": " '{print $2}') - STATE=$(echo "$MODEM_INFO" | grep -m 1 'modem.generic.state ' | awk -F": " '{print $2}') - TYPE=$(echo "$MODEM_INFO" | grep -m 1 'modem.generic.access-technologies.value\[1\]' | awk -F": " '{print $2}') + PERCENT=$(echo "$MODEM_INFO" | grep 'modem.generic.signal-quality.value ' | awk -F": " '{print $2}') + [ -z "$PERCENT" ] && PERCENT=$(awk -v n="$(mmcli -m $MODEM_ID --command 'AT+CSQ')" 'BEGIN{ print int(n*10) }') + OPERATOR=$(echo "$MODEM_INFO" | grep 'modem.3gpp.operator-name ' | awk -F": " '{print $2}') + [ -z "$OPERATOR" ] && OPERATOR=$(mmcli -m $MODEM_ID --command 'AT+QSPN' | awk -F[\"\"] '{ print $2 }') + NUMBER=$(echo "$MODEM_INFO" | grep 'modem.generic.own-numbders.value[1]' | awk -F": " '{print $2}') + STATE=$(echo "$MODEM_INFO" | grep 'modem.generic.state ' | awk -F": " '{print $2}') + TYPE=$(echo "$MODEM_INFO" | grep 'modem.generic.access-technologies.value\[1\]' | awk -F": " '{print $2}') [ -z "$INFO" ] && echo $PERCENT [ "$INFO" = "all" ] && echo "$PERCENT;$OPERATOR;$NUMBER;$STATE;$TYPE" exit diff --git a/luci-app-openmptcprouter/root/etc/config/openmptcprouter b/luci-app-openmptcprouter/root/etc/config/openmptcprouter old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index cec97258f..0befbb606 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -93,8 +93,8 @@ function add_interface(add_interface_ifname) ucic:set("qos","wan" .. i,"interface") ucic:set("qos","wan" .. i,"classgroup","Default") ucic:set("qos","wan" .. i,"enabled","0") - ucic:set("qos","wan" .. i,"upload","4000") - ucic:set("qos","wan" .. i,"download","100000") + ucic:set("qos","wan" .. i,"upload","1000000") + ucic:set("qos","wan" .. i,"download","1000000") ucic:save("qos") ucic:commit("qos") @@ -163,7 +163,7 @@ function set_interface(intf,proto,ipaddr,netmask,gateway,sqmenabled,downloadspee ucic:set("qos",intf,"interface") ucic:set("qos",intf,"classgroup","Default") ucic:set("qos",intf,"enabled","0") - ucic:set("qos",intf,"upload","4000") + ucic:set("qos",intf,"upload","100000") ucic:set("qos",intf,"download","100000") end @@ -1113,9 +1113,7 @@ function interfaces_status() mArray.openmptcprouter['model'] = sys.exec("ubus call system board | jsonfilter -q -e '@.model' 2>/dev/null | tr -d '\n'") local board_name = sys.exec("ubus call system board | jsonfilter -q -e '@.board_name' 2>/dev/null | tr -d '\n'") -- retrieve core temperature - if board_name:match("^raspberrypi.*") then - mArray.openmptcprouter["core_temp"] = sys.exec("cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null"):match("%d+") - end + mArray.openmptcprouter["core_temp"] = sys.exec("cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null"):match("%d+") mArray.openmptcprouter["loadavg"] = sys.exec("cat /proc/loadavg 2>/dev/null"):match("[%d%.]+ [%d%.]+ [%d%.]+") mArray.openmptcprouter["uptime"] = sys.exec("cat /proc/uptime 2>/dev/null"):match("[%d%.]+") diff --git a/luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json b/luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json old mode 100644 new mode 100755 diff --git a/luci-app-openmptcprouter/root/usr/share/rpcd/acl.d/luci-app-openmptcprouter.json b/luci-app-openmptcprouter/root/usr/share/rpcd/acl.d/luci-app-openmptcprouter.json old mode 100644 new mode 100755 diff --git a/luci-app-packet-capture/Makefile b/luci-app-packet-capture/Makefile new file mode 100755 index 000000000..ef6370df3 --- /dev/null +++ b/luci-app-packet-capture/Makefile @@ -0,0 +1,14 @@ +# Copyright 2020 Wojciech Jowsa (wojciech.jowsa@gmail.com) +# This is free software, licensed under the Apache License, Version 2.0 + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Packet capture application +LUCI_DEPENDS:=+luci-mod-admin-full +tcpdump +uhttpd-mod-ubus +coreutils +coreutils-timeout + +PKG_MAINTAINER:=Wojciech Jowsa +PKG_LICENSE:=Apache-2.0 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signatureet diff --git a/luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js b/luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js new file mode 100755 index 000000000..6bf42cc3f --- /dev/null +++ b/luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js @@ -0,0 +1,287 @@ +'use strict'; +'require rpc'; +'require uci'; +'require ui'; +'require fs'; +'require form'; +'require network'; +'require tools.widgets as widgets'; + +var eventSource, + captureFilePoll, + hostName; + +function stopTcpdump() { + fs.exec("/usr/libexec/packet_capture_stop").then(function(replay) { + if (eventSource) + eventSource.close(); + }.bind(this)).catch(function(error) { + console.log(error); + }); +} + +window.addEventListener('beforeunload', stopTcpdump); + +var callLuciProcessList = rpc.declare({ + object: 'luci', + method: 'getProcessList', + expect: { result: [] } +}); + +var callInitAction = rpc.declare({ + object: 'luci', + method: 'setInitAction', + params: [ 'name', 'action' ], + expect: { result: false } +}); + +function addOutput() { + var tcpdumpOut = document.querySelectorAll('[id$="tcpdump_out"]')[0]; + if (tcpdumpOut) + return; + + var frameEl = E('div', {'class': 'cbi-value'}); + + frameEl.appendChild(E('textarea', { + 'id': 'tcpdump_out', + 'class': 'cbi-input-textarea', + 'readonly': '', + 'style': 'width:100%', + 'rows': 30, + })); + + frameEl.firstElementChild.style.fontFamily = 'monospace'; + + var downloadBtn = document.querySelectorAll('[id$="download_file"]')[0]; + if (downloadBtn) + downloadBtn.parentNode.insertBefore(frameEl, downloadBtn.nextSibling); +} + +var downloadCaptureFile = function(ev) { + var form = E('form', { + method: 'post', + action: '/cgi-bin/cgi-download', + enctype: 'application/x-www-form-urlencoded' + }, E('input', { type: 'hidden', name: 'sessionid', value: rpc.getSessionID()}, + E('input', { type: 'hidden', name: 'path', value: "/tmp/capture.pcap"}, + E('input', { type: 'hidden', name: 'filename', value: hostName + "-" + Date.now() + ".pcap"}, + E('input', { type: 'hidden', name: 'mimetype', value: 'application/vnd.tcpdump.pcap'} + ))))); + + ev.currentTarget.parentNode.appendChild(form); + form.submit(); + form.parentNode.removeChild(form); +} + +function subscribeTcpdump() { + if (eventSource) + eventSource.close(); + + eventSource = new EventSource('/ubus/subscribe/tcpdump' + '?' + rpc.getSessionID()); + eventSource.onerror = function(event) { + eventSource.close(); + console.log(event); + }; + + addOutput(); + var textOut = document.querySelectorAll('[id$="tcpdump_out"]')[0]; + textOut.value = ""; + eventSource.addEventListener("tcpdump.data", function(event) { + textOut.value = textOut.value + "\n" + JSON.parse(event.data).data; + }); +} + +function updateButtons() { + var tasks = []; + tasks.push(fs.stat("/var/run/packet_capture.pid").then(L.bind(function(res) { + var downloadBtn = document.querySelectorAll('[id$="download_file"]')[0]; + if (!downloadBtn) + return; + if (!eventSource || eventSource.readyState == 2) + subscribeTcpdump(); + var textOut = document.querySelectorAll('[id$="tcpdump_out"]')[0]; + if (textOut) + textOut.style.borderColor = "green"; + var startBtn = document.querySelectorAll('[id$="start_tcpdump"]')[0]; + if (startBtn) + startBtn.hidden = true; + var stopBtn = document.querySelectorAll('[id$="stop_tcpdump"]')[0]; + if (stopBtn) + stopBtn.hidden = false; + return; + })).catch(function(error) { + var textOut = document.querySelectorAll('[id$="tcpdump_out"]')[0]; + if (textOut) + textOut.style.borderColor = "red"; + var startBtn = document.querySelectorAll('[id$="start_tcpdump"]')[0]; + if (startBtn) + startBtn.hidden = false; + var stopBtn = document.querySelectorAll('[id$="stop_tcpdump"]')[0]; + if (stopBtn) + stopBtn.hidden = true; + if (eventSource) + eventSource.close(); + })); + + return Promise.all(tasks); +} + +function updatePollCheckCaptureFileExists() { + checkCaptureFileExists(); + L.Poll.remove(captureFilePoll); + L.Poll.add(L.bind(checkCaptureFileExists, m),5); +} + +function checkCaptureFileExists() { + var tasks = []; + tasks.push(fs.stat("/tmp/capture.pcap").then(L.bind(function(res) { + var downloadBtn = document.querySelector('[data-action="download"]'); + if (!downloadBtn) + return; + var downloadCheckBox = document.querySelectorAll('[data-widget-id$="file"]')[0].checked; + if (!downloadCheckBox) { + fs.remove("/tmp/capture.pcap").then(function(replay) { + downloadBtn.disabled = true;; + }.bind(this)).catch(function(error) { + console.log(error); + }); + } else { + downloadBtn.disabled = false; + } + })).catch(function(error) { + var downloadBtn = document.querySelector('[data-action="download"]'); + if (downloadBtn) + downloadBtn.disabled = true; + })); + + return Promise.all(tasks); +} + +return L.view.extend({ + + load: function() { + return Promise.all([ + uci.load('system') + ]); + }, + + handleDownload: function(ev) { + downloadCaptureFile(ev); + }, + + render: function(processes) { + var m, s, o; + + hostName = uci.get('system', '@system[0]', 'hostname'); + + m = new form.Map('packet_capture', _('Packet Capture - Tcpdump'), _('Capture packets with tcpdump.')); + s = m.section(form.TypedSection, 'tcpdump'); + s.anonymous = 1; + + o = s.option(widgets.DeviceSelect, 'interface', _('Interface'), _('')); + o.noaliases = true; + o.modalonly = true; + o.rmempty = false; + o.filter = function(section_id, value) { + return true; + } + + o = s.option(form.Value, 'filter', _('Filter'), _('Tcpdump filter like protocol, port etc.')); + o.modalonly = false; + o.datatype = 'and(minlength(1),maxlength(1024))'; + + o = s.option(form.Value, 'duration', _('Duration'), _('Duration of packet capturing in seconds.')); + o.modalonly = false; + o.datatype = 'range(1,4294967296)'; + + o = s.option(form.Value, 'packets', _('Packets'), _('Number of packets to be captured.')); + o.modalonly = false; + o.datatype = 'range(1,4294967296)'; + + o = s.option(form.Flag, 'domains', _('Resolve domains'), _("Convert host addresses to names.")); + + o = s.option(form.Flag, 'verbose', _('Verbose output'), _("Print the link-level header on each dump line.")); + + o = s.option(form.Flag, 'file', _('Save to file'), _("Save capture to pcap file.")); + + o = s.option(form.Button, 'start_tcpdump', _('Start tcpdump'), _('')); + o.inputstyle = 'apply'; + o.onclick = ui.createHandlerFn(this, function(section_id, ev) { + var downloadBtn = document.querySelector('[data-action="download"]'); + if (!downloadBtn) + return; + fs.remove("/tmp/capture.pcap").then(function(replay) { + downloadBtn.disabled = true;; + }.bind(this)).catch(function(error) { + console.log(error); + }); + + var iface = document.querySelectorAll('[id$="interface"]')[1].value, + filter = document.querySelectorAll('[id$="filter"]')[2].value, + packets = document.querySelectorAll('[id$="packets"]')[2].value, + duration = document.querySelectorAll('[id$="duration"]')[2].value, + verbose = document.querySelectorAll('[data-widget-id$="verbose"]')[0].checked, + domains = document.querySelectorAll('[data-widget-id$="domains"]')[0].checked, + file = document.querySelectorAll('[data-widget-id$="file"]')[0].checked + + var args = { + "interface": iface, + "filter": filter, + "packets": packets, + "duration": duration, + "verbose": verbose, + "domains": domains, + "file": file + } + + return fs.exec_direct('/usr/libexec/packet_capture_start', [JSON.stringify(args)]).then(function(replay) { + var error_position = replay.search("error:"); + if (error_position != -1){ + ui.showModal(_(replay.substring(error_position + 6, replay.length)), [ + E('div', { 'class': 'right' }, [ + E('button', { + 'class': 'cbi-button cbi-button-negative important', + 'click': function(ev) { + ui.hideModal(); + } + }, _('Close')), + ]) + ]); + return; + } + rpc.list.apply(rpc).then(function(res) { + for (var k in res) { + if (res[k] == "tcpdump" ) + subscribeTcpdump() + } + }.bind(this)); + }.bind(this)).catch(function(error) { + console.log(error); + }); + }); + + o = s.option(form.Button, 'stop_tcpdump', _('Stop tcpdump'), _('')); + o.inputstyle = 'apply'; + o.onclick = ui.createHandlerFn(this, function(section_id, ev) { + if (!eventSource) + return; + return fs.exec("/usr/libexec/packet_capture_stop").then(function(replay) { + eventSource.close(); + }.bind(this)).catch(function(error) { + console.log(error); + }); + }); + + o = s.option(form.Button, 'download_file', _('Download capture file')); + o.inputstyle = 'action important'; + o.inputtitle = _('Download'); + o.data_action = 'download' + o.onclick = this.handleDownload; + + L.Poll.add(L.bind(updateButtons, m),1); + captureFilePoll = L.bind(updatePollCheckCaptureFileExists, m); + L.Poll.add(captureFilePoll,1); + + return m.render(); + }, +}); diff --git a/luci-app-packet-capture/po/fr/packet-capture.po b/luci-app-packet-capture/po/fr/packet-capture.po new file mode 100755 index 000000000..f2169d1f7 --- /dev/null +++ b/luci-app-packet-capture/po/fr/packet-capture.po @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-03-31 15:07+0000\n" +"Last-Translator: Weblate Admin \n" +"Language-Team: French \n" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.5.2\n" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:177 +msgid "Capture packets with tcpdump." +msgstr "Capturez des paquets avec tcpdump." + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:247 +msgid "Close" +msgstr "Fermer" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:201 +msgid "Convert host addresses to names." +msgstr "Convertissez les adresses d'hôte en noms." + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:277 +msgid "Download" +msgstr "Téléchargement" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:275 +msgid "Download capture file" +msgstr "Télécharger le fichier de capture" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:193 +msgid "Duration" +msgstr "Durée" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:193 +msgid "Duration of packet capturing in seconds." +msgstr "Durée de la capture des paquets en secondes." + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:189 +msgid "Filter" +msgstr "Filtre" + +#: luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json:3 +msgid "Grant access to tcpdump ubus object" +msgstr "Accorder l'accès à l'objet ubus tcpdump" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:181 +msgid "Interface" +msgstr "Interface" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:197 +msgid "Number of packets to be captured." +msgstr "Nombre de paquets à capturer." + +#: luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json:3 +msgid "Packet Capture" +msgstr "Capture de paquets" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:177 +msgid "Packet Capture - Tcpdump" +msgstr "Capture de paquets - Tcpdump" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:197 +msgid "Packets" +msgstr "Paquets" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:203 +msgid "Print the link-level header on each dump line." +msgstr "Imprimez l'en-tête du lien sur chaque ligne de capture." + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:201 +msgid "Resolve domains" +msgstr "Résoudre les domaines" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:205 +msgid "Save capture to pcap file." +msgstr "Enregistrez la capture dans le fichier pcap." + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:205 +msgid "Save to file" +msgstr "Enregistrer dans un fichier" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:207 +msgid "Start tcpdump" +msgstr "Démarrez tcpdump" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:263 +msgid "Stop tcpdump" +msgstr "Arrêter tcpdump" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:189 +msgid "Tcpdump filter like protocol, port etc." +msgstr "Filtre pour tcpdump comme le protocole, le port, etc." + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:203 +msgid "Verbose output" +msgstr "Sortie verbeuse" diff --git a/luci-app-packet-capture/po/templates/packet-capture.pot b/luci-app-packet-capture/po/templates/packet-capture.pot new file mode 100755 index 000000000..4a2659477 --- /dev/null +++ b/luci-app-packet-capture/po/templates/packet-capture.pot @@ -0,0 +1,90 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:177 +msgid "Capture packets with tcpdump." +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:247 +msgid "Close" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:201 +msgid "Convert host addresses to names." +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:277 +msgid "Download" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:275 +msgid "Download capture file" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:193 +msgid "Duration" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:193 +msgid "Duration of packet capturing in seconds." +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:189 +msgid "Filter" +msgstr "" + +#: luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json:3 +msgid "Grant access to tcpdump ubus object" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:181 +msgid "Interface" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:197 +msgid "Number of packets to be captured." +msgstr "" + +#: luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json:3 +msgid "Packet Capture" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:177 +msgid "Packet Capture - Tcpdump" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:197 +msgid "Packets" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:203 +msgid "Print the link-level header on each dump line." +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:201 +msgid "Resolve domains" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:205 +msgid "Save capture to pcap file." +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:205 +msgid "Save to file" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:207 +msgid "Start tcpdump" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:263 +msgid "Stop tcpdump" +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:189 +msgid "Tcpdump filter like protocol, port etc." +msgstr "" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:203 +msgid "Verbose output" +msgstr "" diff --git a/luci-app-packet-capture/po/zh_Hans/packet-capture.po b/luci-app-packet-capture/po/zh_Hans/packet-capture.po new file mode 100755 index 000000000..c8704a7f9 --- /dev/null +++ b/luci-app-packet-capture/po/zh_Hans/packet-capture.po @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-04-30 16:03+0000\n" +"Last-Translator: niergouge <1150108426@qq.com>\n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.5.2\n" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:177 +msgid "Capture packets with tcpdump." +msgstr "使用tcpdump捕获数据包。" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:247 +msgid "Close" +msgstr "关闭" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:201 +msgid "Convert host addresses to names." +msgstr "将主机地址转换为名称。" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:277 +msgid "Download" +msgstr "下载" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:275 +msgid "Download capture file" +msgstr "下载抓包文件" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:193 +msgid "Duration" +msgstr "持续时间" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:193 +msgid "Duration of packet capturing in seconds." +msgstr "抓包时间(以秒为单位)。" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:189 +msgid "Filter" +msgstr "过滤器" + +#: luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json:3 +msgid "Grant access to tcpdump ubus object" +msgstr "授权访问tcpdump ubus对象" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:181 +msgid "Interface" +msgstr "接口" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:197 +msgid "Number of packets to be captured." +msgstr "需要抓包的个数。" + +#: luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json:3 +msgid "Packet Capture" +msgstr "数据包捕获" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:177 +msgid "Packet Capture - Tcpdump" +msgstr "Tcpdump抓包" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:197 +msgid "Packets" +msgstr "包" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:203 +msgid "Print the link-level header on each dump line." +msgstr "打印每个转储行上的链接标题。" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:201 +msgid "Resolve domains" +msgstr "解决域" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:205 +msgid "Save capture to pcap file." +msgstr "保存捕获到pcap文件。" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:205 +msgid "Save to file" +msgstr "保存到文件" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:207 +msgid "Start tcpdump" +msgstr "开始tcp转存" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:263 +msgid "Stop tcpdump" +msgstr "停止tcp转存" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:189 +msgid "Tcpdump filter like protocol, port etc." +msgstr "Tcp转存过滤协议,端口等。" + +#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:203 +msgid "Verbose output" +msgstr "详细输出" diff --git a/luci-app-packet-capture/root/etc/config/packet_capture b/luci-app-packet-capture/root/etc/config/packet_capture new file mode 100755 index 000000000..105a0dc30 --- /dev/null +++ b/luci-app-packet-capture/root/etc/config/packet_capture @@ -0,0 +1 @@ +config tcpdump \ No newline at end of file diff --git a/luci-app-packet-capture/root/usr/libexec/packet_capture b/luci-app-packet-capture/root/usr/libexec/packet_capture new file mode 100755 index 000000000..e1ecf23f7 --- /dev/null +++ b/luci-app-packet-capture/root/usr/libexec/packet_capture @@ -0,0 +1,64 @@ +#!/usr/bin/env lua + +local ubus = require "ubus" +local fs = require "nixio.fs" + +local conn = ubus.connect() +if not conn then + error("Failed to connect to ubus") + return +end + +local args = "-n" +local duration = "" + +if arg[1] ~= nil then + args = arg[1] + if arg[2] ~= "" then + duration = arg[2] + end +end + +local filter = fs.stat("/tmp/tcpdump_filter") +if filter then + args = args .. " -F /tmp/tcpdump_filter" +end + +local ubus_objects = { + tcpdump = { + } +} + +conn:add( ubus_objects ) + +os.execute("sleep 1") + +local command = "tcpdump -l " .. args .. " 2>&1" + +if duration ~= "" then + command = "timeout " .. duration .. " " .. command +end + +local pipe = io.popen(command) + +for line in pipe:lines() do + local params = { + data = line + } + conn:notify(ubus_objects.tcpdump.__ubusobj, "tcpdump.data", params) +end + +local pcap = fs.stat("/tmp/capture.pcap0") +if pcap then + fs.move("/tmp/capture.pcap0","/tmp/capture.pcap") + fs.remove("/tmp/capture.pcap1") +end + +if filter then + fs.remove("/tmp/tcpdump_filter") +end + +conn:close() +pipe:close() + +fs.remove("/var/run/packet_capture.pid") diff --git a/luci-app-packet-capture/root/usr/libexec/packet_capture_start b/luci-app-packet-capture/root/usr/libexec/packet_capture_start new file mode 100755 index 000000000..acdf89152 --- /dev/null +++ b/luci-app-packet-capture/root/usr/libexec/packet_capture_start @@ -0,0 +1,69 @@ +#!/bin/sh + +. /usr/share/libubox/jshn.sh + +PIDFILE="/var/run/packet_capture.pid" + +if [ -f "$PIDFILE"];then + echo "error: Packet capture is running" + exit 1 +fi + +json_load "$1" +json_get_var interface interface +json_get_var filter filter +json_get_var duration duration +json_get_var packets packets +json_get_var verbose verbose +json_get_var domains domains +json_get_var file file + +args="-n" + +if [ "$domains" == "1" ];then + args="" +fi + +if [ -n "$interface" ];then + ip a show "$interface" > /dev/null 2>&1 + if [ "$?" == "1" ]; then + echo "error: Incorrect format of an interface" + exit 1 + fi + + args="$args -i $interface" +fi + +if [ -n "$packets" ];then + echo "$packets" | egrep '^[0-9]*$' + if [ "$?" -eq 0 ];then + args="$args -c $packets" + else + echo "error: Incorrect packets argument" + exit 1 + fi +fi + +if [ "$verbose" == "1" ];then + args="$args -e" +fi + +if [ "$file" == "1" ];then + mem=$(awk '/MemTotal/ {print $2}' /proc/meminfo) + args="$args -W 2 -C $((mem/(1024 * 10))) -w /tmp/capture.pcap -z /usr/libexec/packet_capture_stop" +fi + +if [ -n "$filter" ];then + tcpdump -i lo -d "$filter" >/dev/null 2>/dev/null + if [ $? -eq 1 ];then + echo "error: Incorrect filter argument" + exit 1 + fi + echo "$filter" > /tmp/tcpdump_filter +fi + +(/usr/libexec/packet_capture "$args" "$duration")& + +echo $! > /var/run/packet_capture.pid + +exit 0 diff --git a/luci-app-packet-capture/root/usr/libexec/packet_capture_stop b/luci-app-packet-capture/root/usr/libexec/packet_capture_stop new file mode 100755 index 000000000..bce650346 --- /dev/null +++ b/luci-app-packet-capture/root/usr/libexec/packet_capture_stop @@ -0,0 +1,9 @@ +#!/bin/sh + +pid=$(cat /var/run/packet_capture.pid) +if [ -n "$pid" ] && grep -sq packet_capture "/proc/$pid/cmdline"; then + ppid=$(pgrep -P $pid) + kill -TERM $ppid +fi + +exit 0 diff --git a/luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json b/luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json new file mode 100755 index 000000000..304fe5431 --- /dev/null +++ b/luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json @@ -0,0 +1,18 @@ +{ + "admin/services/packet_capture": { + "title": "Packet Capture", + "order": 90, + "action": { + "type": "view", + "path": "packet_capture/tcpdump" + }, + "depends" : { + "acl": [ "luci-app-packet-capture" ], + "uci": { "packet_capture": true }, + "fs": { "/usr/libexec/packet_capture": "executable", + "/usr/libexec/packet_capture_start": "executable", + "/usr/libexec/packet_capture_stop": "executable" + } + } + } +} diff --git a/luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json b/luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json new file mode 100755 index 000000000..f59d4060b --- /dev/null +++ b/luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json @@ -0,0 +1,25 @@ +{ + "luci-app-packet-capture": { + "description": "Grant access to tcpdump ubus object", + "read": { + "cgi-io": [ "download", "exec" ], + "ubus": { + "tcpdump": [ "*" ], + "luci": [ "getProcessList" ] + }, + "uci": [ "packet_capture", "system" ], + "file": { + "/tmp/capture.pcap": [ "read" ] + } + }, + "write": { + "uci": [ "packet_capture" ], + "file": { + "/usr/libexec/packet_capture_start": [ "exec" ], + "/usr/libexec/packet_capture_stop": [ "exec" ], + "/usr/libexec/packet_capture": [ "exec" ], + "/tmp/capture.pcap": [ "write" ] + } + } + } +} diff --git a/luci-app-shadowsocks-libev/Makefile b/luci-app-shadowsocks-libev/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js b/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js b/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js b/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js b/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua b/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/bg/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/bg/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/ca/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/ca/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/cs/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/cs/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/de/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/de/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/el/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/el/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/en/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/en/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/es/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/es/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/fr/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/fr/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/he/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/he/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/hi/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/hi/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/hu/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/hu/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/it/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/it/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/ja/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/ja/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/ko/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/ko/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/ms/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/ms/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/nb_NO/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/nb_NO/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/pl/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/pl/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/pt/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/pt/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/pt_BR/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/pt_BR/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/ro/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/ro/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/ru/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/ru/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/sk/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/sk/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot b/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/tr/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/tr/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/uk/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/uk/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/vi/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/vi/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/po/zh-tw/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/zh-tw/shadowsocks-libev.po old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/root/etc/uci-defaults/40_luci-shadowsocks-libev b/luci-app-shadowsocks-libev/root/etc/uci-defaults/40_luci-shadowsocks-libev old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/root/usr/share/luci/menu.d/luci-app-shadowsocks-libev.json b/luci-app-shadowsocks-libev/root/usr/share/luci/menu.d/luci-app-shadowsocks-libev.json old mode 100644 new mode 100755 diff --git a/luci-app-shadowsocks-libev/root/usr/share/rpcd/acl.d/luci-app-shadowsocks-libev.json b/luci-app-shadowsocks-libev/root/usr/share/rpcd/acl.d/luci-app-shadowsocks-libev.json old mode 100644 new mode 100755 diff --git a/luci-app-shutdown/Makefile b/luci-app-shutdown/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js b/luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js old mode 100644 new mode 100755 diff --git a/luci-app-shutdown/po/de/shutdown.po b/luci-app-shutdown/po/de/shutdown.po old mode 100644 new mode 100755 diff --git a/luci-app-shutdown/po/fr/shutdown.po b/luci-app-shutdown/po/fr/shutdown.po old mode 100644 new mode 100755 diff --git a/luci-app-shutdown/po/it/shutdown.po b/luci-app-shutdown/po/it/shutdown.po old mode 100644 new mode 100755 diff --git a/luci-app-shutdown/po/oc/shutdown.po b/luci-app-shutdown/po/oc/shutdown.po old mode 100644 new mode 100755 diff --git a/luci-app-shutdown/po/pl/shutdown.po b/luci-app-shutdown/po/pl/shutdown.po old mode 100644 new mode 100755 diff --git a/luci-app-shutdown/po/ru/shutdown.po b/luci-app-shutdown/po/ru/shutdown.po old mode 100644 new mode 100755 diff --git a/luci-app-shutdown/po/templates/shutdown.pot b/luci-app-shutdown/po/templates/shutdown.pot old mode 100644 new mode 100755 diff --git a/luci-app-shutdown/po/zh_Hans/shutdown.po b/luci-app-shutdown/po/zh_Hans/shutdown.po old mode 100644 new mode 100755 diff --git a/luci-app-shutdown/root/usr/share/luci/menu.d/luci-app-shutdown.json b/luci-app-shutdown/root/usr/share/luci/menu.d/luci-app-shutdown.json old mode 100644 new mode 100755 diff --git a/luci-app-shutdown/root/usr/share/rpcd/acl.d/luci-app-shutdown.json b/luci-app-shutdown/root/usr/share/rpcd/acl.d/luci-app-shutdown.json old mode 100644 new mode 100755 diff --git a/luci-app-snmpd/Makefile b/luci-app-snmpd/Makefile old mode 100644 new mode 100755 index 3cd753a5f..12f22abd3 --- a/luci-app-snmpd/Makefile +++ b/luci-app-snmpd/Makefile @@ -1,11 +1,15 @@ +# +# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) +# +# + include $(TOPDIR)/rules.mk -LUCI_TITLE:= Net-SNMP LuCI interface -LUCI_DEPENDS:=+luci-base +snmpd -LUCI_PKGARCH:=all -LUCI_DESCRIPTION:=Some common net-snmp config items. In no way is this comprehensive. -PKG_MAINTAINER:= Karl Palsson -PKG_LICENSE:=Apache-2.0 +LUCI_TITLE:=LuCI SNMPD Interface +LUCI_DEPENDS:=+snmpd +snmptrapd +snmp-utils +snmp-mibs + +PKG_LICENSE:=GPLv3 + +#include ../luci/luci.mk include $(TOPDIR)/feeds/luci/luci.mk - # call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js b/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js deleted file mode 100644 index b9e5e2853..000000000 --- a/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX: Apache-2.0 -// Karl Palsson 2021 -'use strict'; -'require form'; -'require ui'; -'require view'; - -var desc = _("" - + "SNMPD is a master daemon/agent for SNMP, from the " - + "net-snmp project. " - + "Note, OpenWrt has mostly complete UCI support for snmpd, but this LuCI applet " - + "only covers a few of those options. In particular, there is very little/no validation " - + "or help. See /etc/config/snmpd for manual configuration." -); - -return view.extend({ - render: function() { - var m, s, o; - - m = new form.Map("snmpd", _("net-snmp's SNMPD"), desc); - - s = m.section(form.TypedSection, "agent", _("Agent settings")); - s.anonymous = true; - o = s.option(form.Value, "agentaddress", _("The address the agent should listen on"), - _("Eg: UDP:161, or UDP:10.5.4.3:161 to only listen on a given interface")); - - s = m.section(form.TypedSection, "agentx", _("AgentX settings"), - _("Delete this section to disable AgentX")); - s.anonymous = true; - o = s.option(form.Value, "agentxsocket", _("The address the agent should allow AgentX connections to"), - _("This is only necessary if you have subagents using the agentX " - + "socket protocol. Eg: /var/run/agentx.sock")); - s.addremove = true; - - s = m.section(form.TypedSection, "com2sec", _("com2sec security")); - o = s.option(form.Value, "secname", "secname"); - o = s.option(form.Value, "source", "source"); - o = s.option(form.Value, "community", "community"); - - s = m.section(form.TypedSection, "group", "group", _("Groups help define access methods")); - s.addremove = true; - s.option(form.Value, "group", "group"); - s.option(form.Value, "version", "version"); - s.option(form.Value, "secname", "secname"); - - s = m.section(form.TypedSection, "access", "access"); - s.option(form.Value, "group", "group"); - s.option(form.Value, "context", "context"); - s.option(form.Value, "version", "version"); - s.option(form.Value, "level", "level"); - s.option(form.Value, "prefix", "prefix"); - s.option(form.Value, "read", "read"); - s.option(form.Value, "write", "write"); - s.option(form.Value, "notify", "notify"); - - s = m.section(form.TypedSection, "system", _("System"), _("Values used in the MIB2 System tree")); - s.anonymous = true; - s.option(form.Value, "sysLocation", "sysLocation"); - s.option(form.Value, "sysContact", "sysContact"); - s.option(form.Value, "sysName", "sysName"); - - return m.render(); - } -}); diff --git a/luci-app-snmpd/luasrc/controller/snmpd.lua b/luci-app-snmpd/luasrc/controller/snmpd.lua old mode 100644 new mode 100755 diff --git a/luci-app-snmpd/luasrc/model/cbi/snmpd.lua b/luci-app-snmpd/luasrc/model/cbi/snmpd.lua old mode 100644 new mode 100755 diff --git a/luci-app-snmpd/luasrc/view/snmpd.htm b/luci-app-snmpd/luasrc/view/snmpd.htm old mode 100644 new mode 100755 diff --git a/luci-app-snmpd/po/de/snmpd.po b/luci-app-snmpd/po/de/snmpd.po old mode 100644 new mode 100755 diff --git a/luci-app-snmpd/po/fr/snmpd.po b/luci-app-snmpd/po/fr/snmpd.po old mode 100644 new mode 100755 diff --git a/luci-app-snmpd/po/it/snmpd.po b/luci-app-snmpd/po/it/snmpd.po old mode 100644 new mode 100755 diff --git a/luci-app-snmpd/po/oc/snmpd.po b/luci-app-snmpd/po/oc/snmpd.po old mode 100644 new mode 100755 diff --git a/luci-app-snmpd/po/templates/snmpd.pot b/luci-app-snmpd/po/templates/snmpd.pot old mode 100644 new mode 100755 index 5eb995f6b..9acfaf5cb --- a/luci-app-snmpd/po/templates/snmpd.pot +++ b/luci-app-snmpd/po/templates/snmpd.pot @@ -1,69 +1,175 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:22 -msgid "Agent settings" +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:82 +msgid "Access" msgstr "" -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:27 -msgid "AgentX settings" +#: luci-app-snmpd/luasrc/view/snmpd.htm:81 +#: luci-app-snmpd/luasrc/view/snmpd.htm:122 +msgid "Add" msgstr "" -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:28 -msgid "Delete this section to disable AgentX" +#: luci-app-snmpd/luasrc/view/snmpd.htm:66 +#: luci-app-snmpd/luasrc/view/snmpd.htm:116 +msgid "All" msgstr "" -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:25 -msgid "Eg: UDP:161, or UDP:10.5.4.3:161 to only listen on a given interface" +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:139 +msgid "Arguments" msgstr "" -#: applications/luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3 +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:42 +msgid "Community" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:23 +msgid "Contact" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:97 +msgid "Context" +msgstr "" + +#: luci-app-snmpd/luasrc/view/snmpd.htm:54 +msgid "Domain, IP or network" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:9 +#: luci-app-snmpd/luasrc/view/snmpd.htm:24 +msgid "Enabled" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:132 +msgid "Exec" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:6 +#: luci-app-snmpd/luasrc/view/snmpd.htm:21 +#: luci-app-snmpd/luasrc/view/snmpd.htm:48 +msgid "General" +msgstr "" + +#: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3 msgid "Grant UCI access for luci-app-snmpd" msgstr "" -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:40 +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63 +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:72 +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:86 +msgid "Group" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63 msgid "Groups help define access methods" msgstr "" -#: applications/luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json:3 -msgid "SNMPD" +#: luci-app-snmpd/luasrc/view/snmpd.htm:64 +#: luci-app-snmpd/luasrc/view/snmpd.htm:114 +msgid "Interface" msgstr "" -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:8 -msgid "" -"SNMPD is a master daemon/agent for SNMP, from the net-snmp project. Note, OpenWrt has mostly complete UCI " -"support for snmpd, but this LuCI applet only covers a few of those options. " -"In particular, there is very little/no validation or help. See /etc/config/" -"snmpd for manual configuration." +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101 +msgid "Level" msgstr "" -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:56 +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22 +msgid "Location" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24 +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:137 +msgid "Name" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:12 +msgid "Networks" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:116 +msgid "Notify" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136 +msgid "ObjectID" +msgstr "" + +#: luci-app-snmpd/luasrc/view/snmpd.htm:55 +#: luci-app-snmpd/luasrc/view/snmpd.htm:90 +msgid "Output interface" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:138 +msgid "Program" +msgstr "" + +#: luci-app-snmpd/luasrc/view/snmpd.htm:85 +#: luci-app-snmpd/luasrc/view/snmpd.htm:89 +msgid "Protocols" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106 +msgid "Read" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34 +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69 +msgid "Read-only" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35 +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70 +msgid "Read-write" +msgstr "" + +#: luci-app-snmpd/luasrc/controller/snmpd.lua:6 +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4 +#: luci-app-snmpd/luasrc/view/snmpd.htm:19 +#: luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json:3 +msgid "SNMPd" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4 +msgid "SNMPd settings interface (Beta)" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32 +msgid "Server" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37 +msgid "Source" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19 msgid "System" msgstr "" -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:30 -msgid "The address the agent should allow AgentX connections to" +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111 +msgid "Write" msgstr "" -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:24 -msgid "The address the agent should listen on" +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92 +msgid "any" msgstr "" -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:31 -msgid "" -"This is only necessary if you have subagents using the agentX socket " -"protocol. Eg: /var/run/agentx.sock" +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104 +msgid "auth" msgstr "" -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:56 -msgid "Values used in the MIB2 System tree" -msgstr "" - -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:35 +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29 msgid "com2sec security" msgstr "" -#: applications/luci-app-snmpd/htdocs/luci-static/resources/view/snmpd/snmpd.js:20 -msgid "net-snmp's SNMPD" +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103 +msgid "noauth" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67 +msgid "secname" +msgstr "" + +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76 +#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90 +msgid "version" msgstr "" diff --git a/luci-app-snmpd/po/zh_Hans/snmpd.po b/luci-app-snmpd/po/zh_Hans/snmpd.po old mode 100644 new mode 100755 diff --git a/luci-app-snmpd/root/etc/config/snmpd b/luci-app-snmpd/root/etc/config/snmpd old mode 100644 new mode 100755 diff --git a/luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json b/luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json old mode 100644 new mode 100755 index 85850a218..771c4021a --- a/luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json +++ b/luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json @@ -1,13 +1,13 @@ { - "admin/services/snmpd": { - "title": "SNMPD", + "admin/network/snmpd": { + "title": "SNMPd", + "order": 91, "action": { - "type": "view", - "path": "snmpd/snmpd" + "type": "cbi", + "path": "snmpd" }, "depends": { - "acl": [ "luci-app-snmpd" ], - "uci": { "snmpd": true } + "acl": [ "luci-app-snmpd" ] } } } diff --git a/luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json b/luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json old mode 100644 new mode 100755 index 566e52139..1fc168524 --- a/luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json +++ b/luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json @@ -1,11 +1,11 @@ { - "luci-app-snmpd": { - "description": "Grant UCI access for luci-app-snmpd", - "read": { - "uci": [ "snmpd" ] - }, - "write": { - "uci": [ "snmpd" ] - } + "luci-app-snmpd": { + "description": "Grant UCI access for luci-app-snmpd", + "read": { + "uci": [ "snmpd" ] + }, + "write": { + "uci": [ "snmpd" ] } -} + } +} \ No newline at end of file diff --git a/luci-app-sqm-autorate/Makefile b/luci-app-sqm-autorate/Makefile new file mode 100755 index 000000000..51c3b4497 --- /dev/null +++ b/luci-app-sqm-autorate/Makefile @@ -0,0 +1,16 @@ +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for SQM Scripts with autorate +LUCI_DESCRIPTION:=Luci interface for the SQM scripts queue management package with SQM autorate + +PKG_MAINTAINER:=Toke Høiland-Jørgensen + +LUCI_DEPENDS:=+sqm-scripts +bash +tsping +LUCI_PKGARCH:=all + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js b/luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js new file mode 100755 index 000000000..c367e660c --- /dev/null +++ b/luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js @@ -0,0 +1,298 @@ +'use strict'; +'require fs'; +'require ui'; +'require rpc'; +'require uci'; +'require view'; +'require form'; +'require tools.widgets as widgets'; + +return view.extend({ + handleGetHelpText: function(script_name, tbl) { + return fs.read("/usr/lib/sqm/" + script_name + ".help").then(function (text) { + if (text) + return [script_name, text]; + }); + }, + + handleEnableSQM: rpc.declare({ + object: 'luci', + method: 'setInitAction', + params: [ 'sqm', 'enable' ], + expect: { result: false } + }), + + load: function() { + return Promise.all([ + L.resolveDefault(fs.list('/var/run/sqm/available_qdiscs'), []), + L.resolveDefault(fs.list('/usr/lib/sqm'), []).then(L.bind(function(scripts) { + var tasks = [], scriptHelpTbl = {}; + + for (var i = 0; i < scripts.length; i++) + if (scripts[i].name.search(/\.qos$/) != -1) + tasks.push(L.resolveDefault(this.handleGetHelpText(scripts[i].name, scriptHelpTbl), [scripts[i].name, null])); + + return Promise.all(tasks); + }, this)), + uci.load('sqm') + ]); + }, + + render: function(data) { + var qdiscs = data[0], + scripts = data[1]; + + if (qdiscs.length === 0) { + ui.addNotification(null, + E('div', { 'class': 'left' }, [ + E('p', _("The SQM service seems to be disabled. Please use the button below to activate this service.")), + E('button', { + 'class': 'btn cbi-button-active', + 'click': ui.createHandlerFn(this, function() { + return fs.exec('/etc/init.d/sqm', ['enable']).then(function() { + return fs.exec('/etc/init.d/sqm', ['start']); + }).then(function() { + location.reload(); + }); + }) + }, _('Enable SQM')) + ])); + } + + var m, s, o; + + m = new form.Map('sqm', _('Smart Queue Management')); + m.description = _("With SQM you " + + "can enable traffic shaping, better mixing (Fair Queueing)," + + " active queue length management (AQM) " + + " and prioritisation on one " + + "network interface."); + + s = m.section(form.TypedSection, 'queue', _('Queues')); + s.tab("tab_basic", _("Basic Settings")); + s.tab("tab_qdisc", _("Queue Discipline")); + s.tab("tab_linklayer", _("Link Layer Adaptation")); + s.tab("tab_autorate", _("Autorate settings")); + s.anonymous = true; + s.addremove = true; + + o = s.taboption("tab_basic", form.Flag, "enabled", _("Enable this SQM instance.")); + o.rmempty = false; + o.write = L.bind(function(section, value) { + if (value == "1") { + this.handleEnableSQM(); + ui.addNotification(null, E('p', _("The SQM GUI has just enabled the sqm initscript on your behalf. Remember to disable the sqm initscript manually under System Startup menu in case this change was not wished for."))); + } + + return uci.set("sqm", section, "enabled", value); + }, this); + + o = s.taboption("tab_basic", form.Flag, "autorate", _("Enable SQM autorate")); + o.rmempty = false; + + o = s.taboption("tab_basic", widgets.DeviceSelect, "interface", _("Interface name")); + o.rmempty = false; + + o = s.taboption("tab_basic", form.Value, "download", _("Base download speed (kbit/s) (ingress):")); + o.datatype = "and(uinteger,min(0))"; + o.rmempty = false; + + o = s.taboption("tab_basic", form.Value, "min_download", _("Minimum download speed (kbit/s):")); + o.datatype = "and(uinteger,min(0))"; + o.rmempty = false; + o.depends("autorate","1"); + + o = s.taboption("tab_basic", form.Value, "max_download", _("Maximum download speed (kbit/s):")); + o.datatype = "and(uinteger,min(0))"; + o.rmempty = false; + o.depends("autorate","1"); + + o = s.taboption("tab_basic", form.Value, "upload", _("Base upload speed (kbit/s) (egress):")); + o.datatype = "and(uinteger,min(0))"; + o.rmempty = false; + + o = s.taboption("tab_basic", form.Value, "min_upload", _("Minimum upload speed (kbit/s):")); + o.datatype = "and(uinteger,min(0))"; + o.rmempty = false; + o.depends("autorate","1"); + + o = s.taboption("tab_basic", form.Value, "max_upload", _("Maximum upload speed (kbit/s):")); + o.datatype = "and(uinteger,min(0))"; + o.rmempty = false; + o.depends("autorate","1"); + + o = s.taboption("tab_basic", form.Flag, "debug_logging", _("Create log file for this SQM instance under /var/run/sqm/${Interface_name}.[start|stop]-sqm.log.")); + o.rmempty = false; + + o = s.taboption("tab_basic", form.ListValue, "verbosity", _("Verbosity of SQM's output into the system log.")); + o.value("0", "silent"); + o.value("1", "error"); + o.value("2", "warning"); + o.value("5", "info ("+_("default")+")"); + o.value("8", "debug"); + o.value("10", "trace"); + o.default = "5"; + + o = s.taboption("tab_qdisc", form.ListValue, "qdisc", _("Queuing disciplines useable on this system. After installing a new qdisc, you need to restart the router to see updates!"),_("Must be set to cake if autorate is used.")); + for (var i=0; i < qdiscs.length; i++) { + o.value(qdiscs[i].name); + } + o.default = "cake"; + o.rmempty = false; + + var qos_desc = ""; + o = s.taboption("tab_qdisc", form.ListValue, "script", _("Queue setup script")); + for (i = 0; i < scripts.length; i++) { + o.value(scripts[i][0]); + qos_desc += "

" + scripts[i][0] + ":
"; + if (scripts[i][1]) + qos_desc += scripts[i][1] + "

"; + else + qos_desc += "No help text

"; + } + o.default = "piece_of_cake.qos"; + o.rmempty = false; + o.description = qos_desc; + + o = s.taboption("tab_qdisc", form.Flag, "qdisc_advanced", _("Show and Use Advanced Configuration. Advanced options will only be used as long as this box is checked.")); + o.default = false; + + o = s.taboption("tab_qdisc", form.ListValue, "squash_dscp", _("Squash DSCP on inbound packets (ingress):")); + o.value("1", "SQUASH"); + o.value("0", "DO NOT SQUASH"); + o.default = "1"; + o.depends("qdisc_advanced", "1"); + + o = s.taboption("tab_qdisc", form.ListValue, "squash_ingress", _("Ignore DSCP on ingress:")); + o.value("1", "Ignore"); + o.value("0", "Allow"); + o.default = "1"; + o.depends("qdisc_advanced", "1"); + + o = s.taboption("tab_qdisc", form.ListValue, "ingress_ecn", _("Explicit congestion notification (ECN) status on inbound packets (ingress):")); + o.value("ECN", "ECN (" + _("default") + ")"); + o.value("NOECN"); + o.default = "ECN"; + o.depends("qdisc_advanced", "1"); + + o = s.taboption("tab_qdisc", form.ListValue, "egress_ecn", _("Explicit congestion notification (ECN) status on outbound packets (egress).")); + o.value("NOECN", "NOECN (" + _("default") + ")"); + o.value("ECN"); + o.default = "NOECN"; + o.depends("qdisc_advanced", "1"); + + o = s.taboption("tab_qdisc", form.Flag, "qdisc_really_really_advanced", _("Show and Use Dangerous Configuration. Dangerous options will only be used as long as this box is checked.")); + o.default = false + o.depends("qdisc_advanced", "1"); + + o = s.taboption("tab_qdisc", form.Value, "ilimit", _("Hard limit on ingress queues; leave empty for default.")); + o.datatype = "and(uinteger,min(0))"; + o.depends("qdisc_really_really_advanced", "1"); + + o = s.taboption("tab_qdisc", form.Value, "elimit", _("Hard limit on egress queues; leave empty for default.")); + o.datatype = "and(uinteger,min(0))"; + o.depends("qdisc_really_really_advanced", "1"); + + o = s.taboption("tab_qdisc", form.Value, "itarget", _("Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for automatic selection, put in the word default for the qdisc's default.")); + o.datatype = "string"; + o.depends("qdisc_really_really_advanced", "1"); + + o = s.taboption("tab_qdisc", form.Value, "etarget", _("Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for automatic selection, put in the word default for the qdisc's default.")); + o.datatype = "string"; + o.depends("qdisc_really_really_advanced", "1"); + + o = s.taboption("tab_qdisc", form.Value, "iqdisc_opts", _("Advanced option string to pass to the ingress queueing disciplines; no error checking, use very carefully.")); + o.depends("qdisc_really_really_advanced", "1"); + + o = s.taboption("tab_qdisc", form.Value, "eqdisc_opts", _("Advanced option string to pass to the egress queueing disciplines; no error checking, use very carefully.")); + o.depends("qdisc_really_really_advanced", "1"); + + // LINKLAYER + o = s.taboption("tab_linklayer", form.ListValue, "linklayer", _("Which link layer to account for:")); + o.value("none", "none (" + _("default") + ")"); + o.value("ethernet", "Ethernet with overhead: select for e.g. VDSL2."); + o.value("atm", "ATM: select for e.g. ADSL1, ADSL2, ADSL2+."); + o.default = "none"; + + o = s.taboption("tab_linklayer", form.Value, "overhead", _("Per Packet Overhead (byte):")); + o.datatype = "and(integer,min(-1500))"; + o.default = 0 + o.depends("linklayer", "ethernet"); + o.depends("linklayer", "atm"); + + o = s.taboption("tab_linklayer", form.Flag, "linklayer_advanced", _("Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced options will only be used as long as this box is checked.")); + o.depends("linklayer", "ethernet"); + o.depends("linklayer", "atm"); + + o = s.taboption("tab_linklayer", form.Value, "tcMTU", _("Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= interface MTU + overhead:")); + o.datatype = "and(uinteger,min(0))"; + o.default = 2047 + o.depends("linklayer_advanced", "1"); + + o = s.taboption("tab_linklayer", form.Value, "tcTSIZE", _("Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU + 1) / 16:")); + o.datatype = "and(uinteger,min(0))"; + o.default = 128 + o.depends("linklayer_advanced", "1"); + + o = s.taboption("tab_linklayer", form.Value, "tcMPU", _("Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:")); + o.datatype = "and(uinteger,min(0))"; + o.default = 0 + o.depends("linklayer_advanced", "1"); + + o = s.taboption("tab_linklayer", form.ListValue, "linklayer_adaptation_mechanism", _("Which linklayer adaptation mechanism to use; for testing only")); + o.value("default", "default (" + _("default") + ")"); + o.value("cake"); + o.value("htb_private"); + o.value("tc_stab"); + o.default = "default"; + o.depends("linklayer_advanced", "1"); + + // Autorate + o = s.taboption("tab_autorate", form.Flag, "output_processing_stats", _("Output monitoring lines showing processing stats")); + o.default = false; + o.depends("autorate","1"); + + o = s.taboption("tab_autorate", form.Flag, "output_cake_changes", _("Output monitoring lines showing cake bandwidth changes")); + o.default = false; + o.depends("autorate","1"); + + o = s.taboption("tab_autorate", form.Flag, "debug", _("Debug")); + o.default = false; + o.depends("autorate","1"); + + o = s.taboption("tab_autorate", form.Flag, "sss_compensation", _("Starlink support")); + o.default = false; + o.depends("autorate","1"); + + o = s.taboption("tab_autorate", form.Value, "reflector_ping_interval_s", _("Reflector ping interval in seconds:")); + o.default = "0.2"; + o.depends("autorate","1"); + + o = s.taboption("tab_autorate", form.Value, "no_pingers", _("Pingers numbers:")); + o.default = "4"; + o.depends("autorate","1"); + + o = s.taboption("tab_autorate", form.Value, "delay_thr_ms",_("delay threshold in ms:")); + o.default = "25"; + o.depends("autorate","1"); + + o = s.taboption("tab_autorate", form.Flag, "enable_sleep_function", _("Sleep functionnality")); + o.default = true; + o.depends("autorate","1"); + + o = s.taboption("tab_autorate", form.Value, "connection_active_thr_kbps",_("Threshold in Kbit/s below which dl/ul is considered idle")); + o.default = "500"; + o.depends("autorate","1"); + + o = s.taboption("tab_autorate", form.Value, "substained_idle_sleep_thr_s",_("Time threshold to put pingers to sleep on substained dl/ul achieved rate < idle_threshold")); + o.default = "60"; + o.depends("autorate","1"); + + o = s.taboption("tab_autorate", form.Value, "startup_wait_s",_("Number of seconds to wait on startup:")); + o.default = "60"; + o.depends("autorate","1"); + + + return m.render(); + } +}) diff --git a/luci-app-sqm-autorate/po/ar/sqm.po b/luci-app-sqm-autorate/po/ar/sqm.po new file mode 100755 index 000000000..48447fae9 --- /dev/null +++ b/luci-app-sqm-autorate/po/ar/sqm.po @@ -0,0 +1,211 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-03-07 14:36+0000\n" +"Last-Translator: Said Zakaria \n" +"Language-Team: Arabic \n" +"Language: ar\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" +"X-Generator: Weblate 4.5.1\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"سلسلة خيارات متقدمة لتمريرها إلى تخصصات الخروج قائمة انتظار; لا يوجد خطأ " +"التحقق، واستخدام بعناية فائقة." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "الإعدادات الأساسية" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "اسم الواجهة" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/bg/sqm.po b/luci-app-sqm-autorate/po/bg/sqm.po new file mode 100755 index 000000000..4763b4aa3 --- /dev/null +++ b/luci-app-sqm-autorate/po/bg/sqm.po @@ -0,0 +1,219 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-09-27 22:36+0000\n" +"Last-Translator: Iskren Mihaylov \n" +"Language-Team: Bulgarian \n" +"Language: bg\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.9-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Основни настройки" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Създаване на журнален файл за тази инстанция на SQM под /var/run/sqm/" +"${Interface_name}.[start|stop]-sqm.log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +#, fuzzy +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" +"Скорост на изтегляне (kbit/s) (входящ) зададена на 0, деактивира оформянето " +"на входящия трафик:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "Активиране на SQM" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Активиране на тази SQM инстанция." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "Предоставяне на достъп на UCI за luci-app-sqm" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "Твърд лимит на изходните опашки; оставете празно по подразбиране." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "Твърд лимит на входящите опашки; оставете празно по подразбиране." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "Игнориране на DSCP за входящ:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Име на интерфейса" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Целева латентност за изходящ трафик, напр. 5ms [единици: s, ms или us]; " +"оставете празно за автоматичен избор, поставете думата default за използване " +"стойности по подразбиране на qdisc." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Целева латентност за входящ трафик, например 5ms [единици: s, ms или us]; " +"оставете празно за автоматичен избор, поставете думата default за стойности " +"по подразбиране на qdisc." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/bn_BD/sqm.po b/luci-app-sqm-autorate/po/bn_BD/sqm.po new file mode 100755 index 000000000..81e5f56c2 --- /dev/null +++ b/luci-app-sqm-autorate/po/bn_BD/sqm.po @@ -0,0 +1,208 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2020-12-10 19:29+0000\n" +"Last-Translator: Debashish Das \n" +"Language-Team: Bengali (Bangladesh) \n" +"Language: bn_BD\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.4-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "সাধারন সেটিংস" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/ca/sqm.po b/luci-app-sqm-autorate/po/ca/sqm.po new file mode 100755 index 000000000..bab2a9f42 --- /dev/null +++ b/luci-app-sqm-autorate/po/ca/sqm.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Language: ca\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/cs/sqm.po b/luci-app-sqm-autorate/po/cs/sqm.po new file mode 100755 index 000000000..53293384b --- /dev/null +++ b/luci-app-sqm-autorate/po/cs/sqm.po @@ -0,0 +1,210 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-05-07 11:32+0000\n" +"Last-Translator: Adam Salač \n" +"Language-Team: Czech \n" +"Language: cs\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 4.7-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Řetězec rozšířených možností pro předání do frontových disciplín; bez " +"kontroly chyb, používejte s opatrností." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Základní nastavení" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/da/sqm.po b/luci-app-sqm-autorate/po/da/sqm.po new file mode 100755 index 000000000..66b4f784a --- /dev/null +++ b/luci-app-sqm-autorate/po/da/sqm.po @@ -0,0 +1,248 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-11-11 19:12+0000\n" +"Last-Translator: drax red \n" +"Language-Team: Danish \n" +"Language: da\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.9.1-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Avanceret indstillingsstreng, der skal sendes til egress-kø-disciplinerne; " +"ingen fejlkontrol, brug den med stor forsigtighed." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Avanceret indstillingsstreng, der skal overføres til de indgående " +"kø-discipliner; ingen fejlkontrol, brug den med stor forsigtighed." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Grundlæggende indstillinger" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Opret logfil for denne SQM-instans under /var/run/sqm/" +"${Interface_name}.[start|stop]-sqm.log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" +"Downloadhastighed (kbit/s) (ingress) indstilles til 0 for selektivt at " +"deaktivere indgangsformning:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "Aktiver SQM" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Aktiver denne SQM-instans." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" +"ECN-status (Explicit congestion notification) for indgående pakker (ingress):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" +"ECN-status (Explicit congestion notification) på udgående pakker (egress)." + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "Giv UCI-adgang til luci-app-sqm" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "Hård grænse for egress køer; lad den være tom som standard." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "Hård grænse for ingress køer; lad den være tom som standard." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "Ignorer DSCP ved ingress:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Interface navn" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Latency-mål for egress, f.eks. 5ms [enheder: s, ms eller os]; lad det være " +"tomt for automatisk valg, indsæt ordet standard for qdisc'ens standard." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Latency-mål for ingress, f.eks. 5ms [enheder: s, ms eller os]; lad det være " +"tomt for automatisk valg, indsæt ordet standard for qdisc'ens standard." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "Tilpasning af linklag" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" +"Maksimal størrelse til beregning af størrelse og hastighed, tcMTU (byte); " +"skal være >= MTU for grænsefladen + overhead:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" +"Minimal pakkestørrelse, MPU (byte); skal være > 0 for ethernet-" +"størrelsestabeller:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" +"Antal poster i størrelses-/taksttabeller, TSIZE; for ATM skal du vælge TSIZE " +"= (tcMTU + 1) / 16:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "Overhead pr. pakke (byte):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "Kø Disciplin" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "Køopsætningsscript" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "Køer" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" +"Kø-discipliner, der kan bruges på dette system. Når du har installeret en ny " +"qdisc, skal du genstarte routeren for at se opdateringer!" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "SQM QoS" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" +"Vis avancerede linklagsindstillinger (kun nødvendige, hvis MTU > 1500). " +"Avancerede indstillinger bruges kun, så længe dette afkrydsningsfelt er " +"markeret." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" +"Vis og brug avanceret konfiguration. Avancerede indstillinger vil kun blive " +"brugt, så længe dette felt er markeret." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" +"Vis og brug farlig konfiguration. Farlige indstillinger anvendes kun, så " +"længe dette felt er markeret." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "Smart køstyring" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "Squash DSCP på indgående pakker (indgang):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" +"SQM GUI har netop aktiveret sqm initscript på dine vegne. Husk at deaktivere " +"sqm initscript manuelt under System Startup menuen, hvis denne ændring ikke " +"var ønsket." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" +"SQM-tjenesten ser ud til at være deaktiveret. Brug venligst knappen nedenfor " +"for at aktivere denne tjeneste." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" +"Uploadhastighed (kbit/s) (egress) sat til 0 for selektivt at deaktivere " +"udgående formning:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "Verbosity af SQM's output i systemloggen." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "Hvilket forbindelseslag der skal tages hensyn til:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" +"Hvilken forbindelseslag tilpasningsmekanisme der skal bruges; kun til test" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" +"Med SQM kan du aktivere " +"trafikformning, bedre blanding (Fair Queueing), aktiv kølængdestyring (AQM) " +"og prioritering på én netværksgrænseflade." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "Standard" diff --git a/luci-app-sqm-autorate/po/de/sqm.po b/luci-app-sqm-autorate/po/de/sqm.po new file mode 100755 index 000000000..e3cadb151 --- /dev/null +++ b/luci-app-sqm-autorate/po/de/sqm.po @@ -0,0 +1,255 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2022-04-26 22:07+0000\n" +"Last-Translator: ssantos \n" +"Language-Team: German \n" +"Language: de\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.12.1-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Erweiterte Optionszeichenkette zur Übergabe an die ausgangsseitigen " +"Warteschlangendisziplinen; keine Fehlerprüfung, sehr vorsichtig verwenden." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Erweiterte Optionszeichenkette zur Übergabe an die in die Warteschlange " +"einsteigenden Disziplinen; keine Fehlerprüfung, sehr vorsichtig verwenden." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Grundlegende Einstellungen" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Logdatei für diese SQM-Instanz unter /var/run/sqm/${Interface_name}.[start|" +"stop]-sqm.log erstellen." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" +"Download-Geschwindigkeit (kbit/s) (Ingress) auf 0 setzen, um Ingress-Shaping " +"selektiv zu deaktivieren:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "SQM aktivieren" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Diese SQM-Instanz aktivieren" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" +"Explicit congestion notification (ECN) Status für eingehende Pakete " +"(ingress):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" +"Explicit congestion notification (ECN) Status für ausgehende Pakete (egress)." + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "UCI-Zugriff für luci-app-sqm erlauben" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" +"Harte Begrenzung der Ausgangswarteschlangen; Standardmäßig leer lassen." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "Harte Begrenzung der Eingangswarteschlangen; Standardmäßig leer lassen." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "DSCP bei Paketeingang ignorieren:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Schnittstellenname" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Latenzziel für Ausgangswarteschlange, z.B. 5ms [Einheit: s, ms oder us]; " +"Leer lassen für automatische Auswahl, das Wort 'default' eintragen für qdisc " +"Standard." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Latenzziel für Eingangswarteschlange, z.B. 5ms [Einheit: s, ms oder us]; " +"Leer lassen für automatische Auswahl, das Wort 'default' eintragen für qdisc " +"Standard." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "Anpassung der Verbindungsschicht" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" +"Maximale Größe für Größen- und Ratenberechnungen, tcMTU (Byte); muss >= " +"Schnittstellen-MTU + Overhead sein:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" +"Minimale Paketgröße, MPU (Byte); muss > 0 für Ethernet-Größentabellen sein:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" +"Anzahl der Einträge in Größen/Raten-Tabellen, TSIZE; für ATM wählen Sie " +"TSIZE = (tcMTU + 1) / 16:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "Overhead pro Paket (Byte):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +#, fuzzy +msgid "Queue Discipline" +msgstr "Queue Discipline" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "Skript zum Aufsetzen der Warteschlange" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "Warteschlangen" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" +"Warteschlangenstrukturen die auf diesem System benutzbar sind. Der Router " +"muss nach der Installation einer neuen qdisc neu gestartet werden, um die " +"Änderungen sehen zu können." + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "SQM QoS" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" +"Erweiterte Verbindungsschicht-Optionen anzeigen, (nur erforderlich, wenn MTU " +"> 1500). Die erweiterten Optionen werden nur verwendet, solange dieses " +"Kästchen markiert ist." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" +"Erweiterte Konfiguration anzeigen und verwenden. Die erweiterten Optionen " +"werden nur verwendet, wenn diese Option ausgewählt ist." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" +"Gefährliche Einstellungen anzeigen und nutzen. Gefährliche Optionen werden " +"nur benutzt, solange diese Box ausgewählt ist." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "Smart Queue Management" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +#, fuzzy +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "Squash DSCP bei eingehenden Paketen (Ingress):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" +"Die SQM-GUI hat soeben das sqm-Initskript in Ihrem Namen aktiviert. Denken " +"Sie daran, das sqm-Initscript manuell im Systemstartmenü zu deaktivieren, " +"falls diese Änderung nicht gewünscht wurde." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" +"Der SQM-Dienst scheint deaktiviert zu sein. Bitte verwenden Sie die " +"Schaltfläche unten, um diesen Dienst zu aktivieren." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" +"Upload-Geschwindigkeit (kbit/s) (egress) auf 0 setzen, um die egress " +"Paketflusskontrolle abzuschalten:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "Festlegen, wie ausführlich SQM ins Systemlog schreiben soll" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "Welche Verbindungsschicht zu berücksichtigen ist:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" +"Welcher Verbindungsschicht-Anpassungsmechanismus verwendet werden soll; nur " +"zum Testen" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" +"Mit SQM können Sie Traffic " +"Shaping, besseres Mischen (Fair Queueing), aktives Queue Length Management " +"(AQM) und Priorisierung auf einer Netzwerkschnittstelle aktivieren." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "Standardeinstellung" diff --git a/luci-app-sqm-autorate/po/el/sqm.po b/luci-app-sqm-autorate/po/el/sqm.po new file mode 100755 index 000000000..d165ea0d0 --- /dev/null +++ b/luci-app-sqm-autorate/po/el/sqm.po @@ -0,0 +1,208 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-06-06 14:38+0000\n" +"Last-Translator: Stefanos Batsios \n" +"Language-Team: Greek \n" +"Language: el\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.7-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Βασικές Ρυθμίσεις" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "Χορήγηση δικαιώματος χρήσης του UCI από το luci-app-sqm" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Όνομα διεπαφής (Interface)" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/en/sqm.po b/luci-app-sqm-autorate/po/en/sqm.po new file mode 100755 index 000000000..548b41e7d --- /dev/null +++ b/luci-app-sqm-autorate/po/en/sqm.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Language: en\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/es/sqm.po b/luci-app-sqm-autorate/po/es/sqm.po new file mode 100755 index 000000000..8ca3d0c57 --- /dev/null +++ b/luci-app-sqm-autorate/po/es/sqm.po @@ -0,0 +1,250 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2022-04-28 18:11+0000\n" +"Last-Translator: Franco Castillo \n" +"Language-Team: Spanish \n" +"Language: es\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.12.1-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Cadena de opciones avanzadas para pasar a las disciplinas de cola de salida; " +"sin verificación de errores, use con mucho cuidado." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Cadena de opciones avanzadas para pasar a las disciplinas de colas de " +"ingreso; sin verificación de errores, use con mucho cuidado." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Configuración básica" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Cree un archivo de registro para esta instancia de SQM en /var/run/sqm/" +"${Interface_name}.[start|stopfont>-sqm.log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" +"La velocidad de descarga (kbit/s) (ingreso) se establece en 0 para " +"desactivar selectivamente la configuración de ingreso:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "Activar SQM" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Activar esta instancia de SQM." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" +"Estado de notificación explícita de congestión (ECN) en paquetes entrantes " +"(ingreso):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" +"Estado explícito de notificación de congestión (ECN) en paquetes salientes " +"(salida)." + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "Conceder acceso UCI para luci-app-sqm" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "Límite estricto en las colas de salida; dejar en blanco por defecto." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "Límite estricto en las colas de ingreso; dejar en blanco por defecto." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "Ignorar DSCP en ingreso:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Nombre de interfaz" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Objetivo de latencia para la salida, p.e. 5ms [unidades: s, ms o us]; déjelo " +"en blanco para la selección automática, ingrese la palabra default para el " +"qdisc predeterminado." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Objetivo de latencia para la entrada, p.e. 5 ms [unidades: s, ms o us]; " +"déjelo en blanco para la selección automática, ingrese la palabra default " +"para el qdisc predeterminado." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "Adaptación de capa de enlace" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" +"Tamaño máximo para cálculos de tamaño y velocidad, tcMTU (byte); necesita " +"ser >= interfaz MTU + gastos generales:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" +"Tamaño de paquete mínimo, MPU (byte); debe ser > 0 para tablas de tamaño de " +"ethernet:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" +"Número de entradas en tablas de tamaño/tasa, TSIZE; para ATM, elija TSIZE = " +"(tcMTU + 1) / 16:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "Por paquete de arriba (byte):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "Disciplina de cola" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "Script de configuración de cola" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "Colas" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" +"Disciplinas de colas utilizables en este sistema. Después de instalar un " +"nuevo qdisc, ¡debe reiniciar el enrutador para ver las actualizaciones!" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "Gestión inteligente de colas" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" +"Mostrar opciones avanzadas de Linklayer (solo es necesario si MTU > 1500). " +"Las opciones avanzadas solo se utilizarán mientras esta casilla esté marcada." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" +"Mostrar y usar la Configuración avanzada. Las opciones avanzadas solo se " +"utilizarán mientras esta casilla esté marcada." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" +"Mostrar y usar la Configuración Peligrosa. Las opciones peligrosas sólo se " +"utilizarán mientras esté marcada esta casilla." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "Gestión inteligente de colas" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "Aplastar DSCP en paquetes entrantes (ingreso):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" +"La GUI de SQM acaba de activar el initscript de sqm en su nombre. Recuerde " +"desactivar el initscript de sqm manualmente en el menú Inicio del sistema en " +"caso de que no se desee este cambio." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" +"El servicio SQM parece estar desactivado. Utilice el botón de abajo para " +"activar este servicio." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" +"Velocidad de carga (kbit/s) (salida) establecida en 0 para desactivar " +"selectivamente la configuración de salida:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "Verbosidad de la salida de SQM en el registro del sistema." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "Qué capa de enlace debe tener en cuenta:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "Qué mecanismo de adaptación de capa de enlace usar; solo para pruebas" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" +"Con SQM puede activar la " +"conformación del tráfico, una mejor mezcla (Fair Queuing), gestión activa de " +"la longitud de la cola (AQM) y priorización en una interfaz de red." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "predeterminado" diff --git a/luci-app-sqm-autorate/po/fi/sqm.po b/luci-app-sqm-autorate/po/fi/sqm.po new file mode 100755 index 000000000..d37903f76 --- /dev/null +++ b/luci-app-sqm-autorate/po/fi/sqm.po @@ -0,0 +1,216 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2020-06-30 13:42+0000\n" +"Last-Translator: Petri Asikainen \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.2-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Perusasetukset" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Luo lokitiedosto tälle SQM-esiintymälle: /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" +"Latausnopeus (kbit/s) (ingress). Aseta arvoksi 0 ottaaksesi latausnopeuden " +"säädön pois päältä:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Ota tämä SQM-esiintymä käyttöön." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "Salli pääsy SQM-asetuksiin" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "Sivuuta DSCP saapuvalta liikenteeltä:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Sovittimen nimi" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "Linkkikerroksen sopeuttaminen" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "Lisäkuorma pakettia kohti (tavu):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "Jonomenetelmä (qdisc)" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "Jonomenetelmän asetustiedosto" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "Jonot" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" +"Käytettävissä olevat jonomenetelmät (qdisc). Uuden qdiscin asentamisen " +"jälkeen tiedot päivittyvät laitteen uudelleenkäynnistyksen yhteydessä." + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "SQM QoS" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "Älykäs jononhallinta" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" +"Lähetysnopeus kilobitteinä sekunnissa (kbit/s). Aseta arvoksi 0 ottaaksesi " +"lähetysnopeuden säädön pois päältä:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "SQM tapahtumien lokiinkirjaamisen tarkkuus." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "Mitä linkkerroksen sopeutumistapaa käytetään (vain testaamiseen)" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "vakio" diff --git a/luci-app-sqm-autorate/po/fr/sqm.po b/luci-app-sqm-autorate/po/fr/sqm.po new file mode 100755 index 000000000..91b243562 --- /dev/null +++ b/luci-app-sqm-autorate/po/fr/sqm.po @@ -0,0 +1,247 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2022-08-10 18:51+0000\n" +"Last-Translator: Weblate Admin \n" +"Language-Team: French \n" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.10.1\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Chaîne d'options avancées pour passer aux disciplines de file d'attente de " +"sortie ; pas de vérification d'erreur, à utiliser avec précaution." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Chaîne d'options avancées à passer aux disciplines de file d'attente " +"d'entrée ; pas de vérification d'erreur, à utiliser avec beaucoup de " +"précaution." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Paramètres de base" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Créer un fichier journal pour cette instance SQM sous /var/run/sqm/" +"${nom_interface}. [start|stop]-sqm.log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" +"Vitesse de téléchargement (kbit/s) (ingress) réglée sur 0 pour désactiver " +"sélectivement la mise en forme de l'ingress :" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "Active SQM" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Activez cette instance SQM." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" +"Statut de notification de congestion (ECN) sur les paquets entrants " +"(ingress) :" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" +"Statut de notification de congestion (ECN) sur les paquets sortant (egress)." + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "Autoriser l'accès UCI pour luci-app-sqm" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "Limite des files d'attente pour la sortie ; laisser vide par défaut." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "Limite des files d'attente entrée ; laisser vide par défaut." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "Ignoré DSCP à l'entrée :" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Nom de l’interface" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Cible de latence pour la sortie, par exemple 5ms [unités : s, ms ou us] ; " +"laisser vide pour la sélection automatique, mettre Default pour la valeur " +"par défaut du qdisc." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Cible de latence d'entrée, par exemple 5ms [unités : s, ms ou us] ; laisser " +"vide pour la sélection automatique, mettre default pour la valeur par défaut " +"du qdisc." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "Adaptation de liaison" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" +"Taille maximale pour les calculs de taille et de taux, tcMTU (byte) ; doit " +"être >= interface MTU + overhead :" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" +"Taille minimale des paquets, MPU (byte) ; doit être > 0 pour les tailes de " +"tables ethernet :" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" +"Nombre d'entrées de taille/debit tables, TSIZE ; for ATM choose TSIZE = " +"(tcMTU + 1) / 16 :" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "Overhead par Packet(byte) :" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "Queue Discipline" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "Script de file d'attente" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "Queues" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" +"Les disciplines de file d'attente sur ce système. Après avoir installé un " +"nouveau qdisc, vous devez redémarrer le routeur pour voir les mises à jour !" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "SQM QoS" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" +"Afficher les options avancées du Linklayer, (uniquement nécessaire si MTU > " +"1500). Les options avancées ne seront utilisées que si cette case est cochée." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" +"Afficher et utiliser la configuration avancée. Les options avancées ne " +"seront utilisées que tant que cette case sera cochée." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" +"Afficher et utiliser une configuration dangereuse. Les options dangereuses " +"ne seront utilisées que si cette case est cochée." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "Management File d'attente" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "Écraser le DSCP sur les paquets entrants (ingress) :" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" +"L'interface graphique SQM vient d'activer l'initscript sqm en votre nom. " +"N'oubliez pas de désactiver manuellement le sqm initscript dans le menu de " +"démarrage du système au cas où ce changement ne serait pas souhaité." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "Vitesse de chargement (kbit/s) (sortie) Mettre sur 0 pour désactiver :" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "Verbosité de la sortie de SQM dans le journal du système." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "Quelle couche liaison à prendre en compte :" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "Mécanisme d'adaptation de la couche de liaison ; pour essai uniquement" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" +"Avec SQM vous pouvez permettre " +"la régulation du trafic, un meilleur mélange (Fair Queueing), la gestion " +"active de la longueur des files d'attente (AQM) et la priorisation sur une " +"seule interface réseau." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "Par défaut" diff --git a/luci-app-sqm-autorate/po/he/sqm.po b/luci-app-sqm-autorate/po/he/sqm.po new file mode 100755 index 000000000..587c49fcd --- /dev/null +++ b/luci-app-sqm-autorate/po/he/sqm.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Language: he\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/hi/sqm.po b/luci-app-sqm-autorate/po/hi/sqm.po new file mode 100755 index 000000000..111424659 --- /dev/null +++ b/luci-app-sqm-autorate/po/hi/sqm.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Language: hi\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/hu/sqm.po b/luci-app-sqm-autorate/po/hu/sqm.po new file mode 100755 index 000000000..e4b96b811 --- /dev/null +++ b/luci-app-sqm-autorate/po/hu/sqm.po @@ -0,0 +1,208 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-08-16 16:38+0000\n" +"Last-Translator: Bence Csókás \n" +"Language-Team: Hungarian \n" +"Language: hu\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.8-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Alapszintű beállítások" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "SQM engedélyezése" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Csatoló neve" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "alapértelmezett" diff --git a/luci-app-sqm-autorate/po/it/sqm.po b/luci-app-sqm-autorate/po/it/sqm.po new file mode 100755 index 000000000..3a867c3ad --- /dev/null +++ b/luci-app-sqm-autorate/po/it/sqm.po @@ -0,0 +1,208 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-09-09 08:44+0000\n" +"Last-Translator: pisquan8 \n" +"Language-Team: Italian \n" +"Language: it\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.8.1-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Nome interfaccia" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "predefinito" diff --git a/luci-app-sqm-autorate/po/ja/sqm.po b/luci-app-sqm-autorate/po/ja/sqm.po new file mode 100755 index 000000000..f7179b9dc --- /dev/null +++ b/luci-app-sqm-autorate/po/ja/sqm.po @@ -0,0 +1,208 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2020-12-10 19:29+0000\n" +"Last-Translator: Ryota <21ryotagamer@gmail.com>\n" +"Language-Team: Japanese \n" +"Language: ja\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.4-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "基本設定" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "この SQM インスタンスを有効にします。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "luci-app-sqmにUCIアクセスを許可" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "インターフェース名" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "キュー" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "スマート・キュー管理" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "デフォルト" diff --git a/luci-app-sqm-autorate/po/ko/sqm.po b/luci-app-sqm-autorate/po/ko/sqm.po new file mode 100755 index 000000000..8dbf6b6dd --- /dev/null +++ b/luci-app-sqm-autorate/po/ko/sqm.po @@ -0,0 +1,208 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-06-07 10:49+0000\n" +"Last-Translator: Sunggu Choi \n" +"Language-Team: Korean \n" +"Language: ko\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.7-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "기본 설정" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/mr/sqm.po b/luci-app-sqm-autorate/po/mr/sqm.po new file mode 100755 index 000000000..4c14d4090 --- /dev/null +++ b/luci-app-sqm-autorate/po/mr/sqm.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Language: mr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/ms/sqm.po b/luci-app-sqm-autorate/po/ms/sqm.po new file mode 100755 index 000000000..b1857d906 --- /dev/null +++ b/luci-app-sqm-autorate/po/ms/sqm.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Language: ms\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/nb_NO/sqm.po b/luci-app-sqm-autorate/po/nb_NO/sqm.po new file mode 100755 index 000000000..2c2441298 --- /dev/null +++ b/luci-app-sqm-autorate/po/nb_NO/sqm.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Language: nb_NO\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/pl/sqm.po b/luci-app-sqm-autorate/po/pl/sqm.po new file mode 100755 index 000000000..63d080dce --- /dev/null +++ b/luci-app-sqm-autorate/po/pl/sqm.po @@ -0,0 +1,253 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-06-22 17:33+0000\n" +"Last-Translator: Matthaiks \n" +"Language-Team: Polish \n" +"Language: pl\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.7.1-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Zaawansowany łańcuch opcji, aby przejść do dyscyplin kolejkowania egress; " +"bez sprawdzania błędów, używaj bardzo ostrożnie." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Zaawansowany łańcuch opcji, aby przejść do dyscyplin kolejkowania ingress; " +"bez sprawdzania błędów, używaj bardzo ostrożnie." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Podstawowe ustawienia" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Utwórz plik dziennika dla tej instancji SQM w /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" +"Prędkość pobierania (kbit/s) (ingress) ustawiona na 0, aby selektywnie " +"wyłączyć kształtowanie ingress:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "Włącz SQM" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Włącz tę instancję SQM." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" +"Status jawnego powiadomienia o przeciążeniu (ECN) na pakietach " +"przychodzących (ingress):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" +"Status jawnego powiadomienia o przeciążeniu (ECN) na pakietach wychodzących " +"(egress)." + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "Udziel dostępu UCI do luci-app-sqm" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "Twardy limit kolejek egress; pozostawić puste dla ustawień domyślnych." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" +"Twardy limit kolejek ingress; pozostawić puste dla ustawień domyślnych." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "Ignoruj DSCP przy ingress:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Nazwa interfejsu" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Cel opóźnienia dla egress, np. 5ms [jednostki: s, ms lub us]; pozostaw puste " +"dla automatycznego wyboru, wpisz słowo default dla domyślnego qdisc." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Cel opóźnienia dla ingress, np. 5ms [jednostki: s, ms lub us]; pozostaw " +"puste dla automatycznego wyboru, wpisz słowo default dla domyślnego qdisc." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "Adaptacja warstwy połączenia" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" +"Maksymalny rozmiar do obliczeń wielkości i szybkości, tcMTU (bajt); musi " +"być> = interfejs MTU + narzut:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" +"Minimalny rozmiar pakietu, MPU (bajt); musi wynosić> 0 dla tabel rozmiarów " +"Ethernet:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" +"Liczba wpisów w tabelach wielkości/szybkości, TSIZE; dla ATM wybrać TSIZE = " +"(tcMTU + 1) / 16:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "Narzut na pakiet (bajt):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "Dyscyplina kolejki" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "Skrypt konfiguracji kolejki" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "Kolejki" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" +"Dyscypliny kolejkowania przydatne w tym systemie. Po zainstalowaniu nowej " +"qdisc musisz ponownie uruchomić router, aby zobaczyć aktualizacje!" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "SQM QoS" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" +"Pokaż zaawansowane opcje Linklayera (wymagane tylko, jeśli MTU>1500). Opcje " +"zaawansowane będą używane tylko tak długo, jak to pole jest zaznaczone." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" +"Pokaż i użyj konfiguracji zaawansowanej. Opcje zaawansowane będą używane " +"tylko tak długo, jak to pole jest zaznaczone." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" +"Pokaż i używaj niebezpiecznej konfiguracji. Niebezpieczne opcje będą używane " +"tylko tak długo, jak to pole jest zaznaczone." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "Inteligentne zarządzanie kolejkami" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "Squash DSCP na pakietach przychodzących (ingress):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" +"SQM GUI właśnie włączył w Twoim imieniu initscript sqm. Pamiętaj, aby " +"ręcznie wyłączyć skrypt initscript sqm w menu autostart, jeśli ta zmiana nie " +"była pożądana." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" +"Usługa SQM wydaje się wyłączona. Proszę użyć przycisku poniżej, aby " +"aktywować tę usługę." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" +"Prędkość wysyłania (kbit/s) (egress) ustawiona na 0, aby selektywnie " +"wyłączyć kształtowanie egress:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "Szczegółowość danych wyjściowych SQM w dzienniku systemowym." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "Którą warstwę łącza należy uwzględnić:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" +"Którego mechanizmu dostosowania odtwarzacza linków należy użyć; tylko do " +"testowania" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" +"Z SQM można włączyć " +"kształtowanie ruchu, lepsze mieszanie (Fair Queueing), aktywne zarządzanie " +"długością kolejki (AQM) i ustalanie priorytetów na jednym interfejsie " +"sieciowym." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "domyślna" diff --git a/luci-app-sqm-autorate/po/pt/sqm.po b/luci-app-sqm-autorate/po/pt/sqm.po new file mode 100755 index 000000000..ff2747104 --- /dev/null +++ b/luci-app-sqm-autorate/po/pt/sqm.po @@ -0,0 +1,256 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-08-04 20:24+0000\n" +"Last-Translator: ssantos \n" +"Language-Team: Portuguese \n" +"Language: pt\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.8-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Cadeia de opções avançada para passar para as disciplinas de enfileiramento " +"de saída; sem verificação de erros, use com muito cuidado." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Cadeia de opções avançada para passar para as disciplinas de enfileiramento " +"de entrada; sem verificação de erros, use com muito cuidado." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Configurações Básicas" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Criar ficheiro de log para esta instância de SQM em /var/run/sqm/" +"${Nome_da_Interface}.[start|stop]-sqm.log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" +"Velocidade de descarrega (kbit/s) (ingresso) configurada a 0 para desativar " +"seletivamente a forma de ingresso:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "Ativar o SQM" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Ativar esta instância do SQM." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" +"Estado de notificação de congestionamento explícito (ECN) nos pacotes de " +"entrada (ingresso):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" +"Estado de notificação de congestionamento explícito (ECN) nos pacotes de " +"saída (egress)." + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "Conceder acesso UCI ao luci-app-sqm" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" +"Limite rígido nas filas de espera de saída; deixe em branco para utilizar " +"valores predefinidos." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" +"Limite rígido nas filas de espera de entrada; deixe em branco para utilizar " +"valores predefinidos." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "Ignore o DSCP na entrada:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Nome da interface" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Meta de latência para saída, p.ex. 5ms [unidades: s, ms, ou us]; deixe vazio " +"para seleção automática, entre a palavra default para a predefinição do " +"qdisc." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Meta de latência para entrada, p.ex. 5ms [unidades: s, ms, ou us]; deixe " +"vazio para seleção automática, entre a palavra default para a predefinição " +"do qdisc." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "Adaptação da Camada de Ligação" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" +"Tamanho máximo para cálculos de tamanho e taxa, tcMTU (byte); deve ser >= " +"MTU da interface + sobrecarga:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" +"Tamanho mínimo do pacote, MPU (byte); deve ser > 0 para tabelas de tamanho " +"Ethernet:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" +"Quantidade de entradas nas tabelas de tamanho/taxa, TSIZE; para ATM escolha " +"TSIZE = (tcMTU + 1) / 16:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "Sobrecarga por Pacote (byte):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "Disciplina de Fila de Espera" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "Script de configuração da fila de espera" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "Filas de Espera" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" +"Disciplinas de enfileiramento utilizáveis neste sistema. Depois de instalar " +"um novo qdisc, precisa reiniciar o roteador para ver as atualizações!" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "SQM QoS" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" +"Mostrar Opções Avançadas da Camada de Ligações, (apenas necessário se MTU > " +"1500). As opções avançadas só serão usadas enquanto esta caixa estiver " +"marcada." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" +"Mostrar e Usar Configuração Avançada. As opções avançadas só serão usadas " +"enquanto esta caixa estiver marcada." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" +"Mostrar e Utilizar Configuração Perigosa. As opções perigosas só serão " +"usadas enquanto esta caixa estiver marcada." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "Gestão Inteligente de Filas de Espera" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "Esmagar DSCP em pacotes de entrada (ingresso):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" +"O GUI SQM acabou de ativar o initscript sqm em seu nome. Lembre-se de " +"desativar o initscript sqm manualmente no menu Início do Sistema no caso " +"desta alteração não ter sido desejada." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" +"O serviço SQM parece estar desativado. Use o botão abaixo para ativar este " +"serviço." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" +"Velocidade de envio (kbit/s) (saída) definida como 0 para desativar " +"seletivamente a forma de saída:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "Verbosidade da saída do SQM no log do sistema." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "Que camada de ligação para a conta:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" +"Utilizar qual mecanismo de adaptação da camada de ligação; apenas para testes" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" +"Pode ativar a formação de tráfego com SQM, para melhor mistura (Fair Queueing), gestão ativa do " +"comprimento da fila de espera (AQM) e priorização numa interface de rede." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "padrão" diff --git a/luci-app-sqm-autorate/po/pt_BR/sqm.po b/luci-app-sqm-autorate/po/pt_BR/sqm.po new file mode 100755 index 000000000..ddcc9111b --- /dev/null +++ b/luci-app-sqm-autorate/po/pt_BR/sqm.po @@ -0,0 +1,258 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-06-22 17:33+0000\n" +"Last-Translator: Wellington Terumi Uemura \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt_BR\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.7.1-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Cadeia de opções avançadas passada para as disciplinas de enfileiramento de " +"saída; sem verificação de erros, use com muito cuidado." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Cadeia de opções avançadas passada para as disciplinas de enfileiramento de " +"entrada; sem verificação de erro, use com muito cuidado." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Configurações Básicas" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Criar um arquivo de registro log para esta instância SQM em /var/run/sqm/" +"${Interface_name}.[start|stop]-sqm.log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" +"Velocidade de Download (kbits/s) (entrada), defina como 0 para desativar " +"seletivamente a modelagem do tráfico de entrada:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "Ative o SQM" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Ative esta instância do SQM." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" +"Status de notificação explicita de congestionamento (ECN) durante a entrada " +"de pacotes (ingress):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" +"Status de notificação explicita de congestionamento (ECN) durante a saída de " +"pacotes (egress)." + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "Conceda acesso UCI ao luci-app-sqm" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" +"Limite máximo nas filas de saída; deixe em branco para utilizar valores " +"predefinidos." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" +"Limite máximo nas filas de entrada; deixe em branco para utilizar valores " +"predefinidos." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "Ignore o DSCP na entrada:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Nome da Interface" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Meta de latência para saída, por exemplo, 5ms [unidades: s, ms ou nós]; " +"deixe vazio para usar a seleção automática, coloque a palavra default para " +"utilizar os valores predefinidos do qdisc." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Meta de latência para entrada, por exemplo, 5ms [unidades: s, ms ou nós]; " +"deixe vazio para usar a seleção automática, coloque a palavra default para " +"utilizar os valores predefinidos do qdisc." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "Adaptação da Camada do Link de Ligação" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" +"Tamanho máximo para realizar os cálculos de tamanho e taxa, tcMTU (byte); " +"precisa ser >= interface MTU + sobrecarga:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" +"Tamanho mínimo do pacote, MPU (byte); precisa ser > 0 para as tabelas de " +"tamanho ethernet:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" +"Quantidade de entradas de tamanho/taxa nas tabelas, TSIZE; para o ATM, " +"escolha TSIZE = (tcMTU + 1) / 16:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "Por Sobrecarga de Pacote (byte):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "Disciplina da Fila" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "Script de configuração da fila" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "Filas de espera" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" +"As disciplinas de enfileiramento utilizáveis neste sistema. Depois de " +"instalar um novo qdisc, você precisa reiniciar o roteador para ver as " +"atualizações!" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "SQM QoS" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" +"Mostrar as Opções Avançadas da Camada do Link ( só é necessário caso MTU > " +"1500). As opções avançadas só serão usadas quando esta caixa for selecionada." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" +"Exibir e Usar a Configuração Avançada. As opções avançadas só serão usadas " +"quando esta caixa for selecionada." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" +"Mostrar e Usar as Configurações Perigosas. As opções perigosas só serão " +"usadas quando esta caixa for selecionada." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "Gestão Inteligente das Filas de Espera" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "Liquidar o DSCP durante a entrada dos pacotes (ingress):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" +"O GUI SQM acabou de ativar o initscript sqm em seu nome. Lembre-se de " +"desativar o initscript sqm manualmente no menu Inicio do Sistema caso esta " +"alteração não tenha sido requerida." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" +"O serviço SQM parece estar desativado. Use o botão abaixo para ativar este " +"serviço." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" +"Velocidade de upload (kbit/s) (saída), defina como 0 para desativar " +"seletivamente a modelagem do tráfico de saída:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "Prolixidade da saída do SQM's nos arquivos de registro log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "Qual camada de link deve ser considerada:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" +"Qual o mecanismo de adaptação de camadas do link para usar; para testes " +"apenas" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" +"Com a SQM você " +"pode habilitar a modelagem de tráfego, ter uma melhor mistura (Fila Justa), " +"gerenciamento ativo de comprimento de fila (AQM) e priorização em uma " +"interface de rede." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "Padrão" diff --git a/luci-app-sqm-autorate/po/ro/sqm.po b/luci-app-sqm-autorate/po/ro/sqm.po new file mode 100755 index 000000000..6b5dd6579 --- /dev/null +++ b/luci-app-sqm-autorate/po/ro/sqm.po @@ -0,0 +1,257 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-11-29 10:52+0000\n" +"Last-Translator: Simona Iacob \n" +"Language-Team: Romanian \n" +"Language: ro\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" +"X-Generator: Weblate 4.10-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Șir de opțiuni avansate care trebuie transmise disciplinelor de coadă de " +"ieșire; nu se verifică erorile, se utilizează cu mare atenție." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Șir de opțiuni avansate care trebuie transmise disciplinelor de intrare în " +"coada de așteptare; fără verificare a erorilor, utilizați cu mare atenție." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Setări de bază" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Creați un fișier jurnal pentru această instanță SQM în /var/run/sqm/" +"${Interface_name}.[start|stop]-sqm.log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" +"Viteza de descărcare (kbit/s) (intrare) se setează la 0 pentru a dezactiva " +"selectiv modelarea intrării:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "Activați SQM" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Activează această instanță SQM." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" +"Starea ECN (Explicit congestion notification (notificare explicită de " +"congestie) pe pachetele de intrare (intrare):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" +"Starea ECN (Explicit congestion notification (notificare explicită de " +"congestie) pe pachetele de ieșire (egress)." + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "Acordă acces UCI pentru luci-app-sqm" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "Limita dură a cozilor de ieșire; lăsați gol pentru valoarea implicită." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" +"Limita dură a cozilor de intrare; lăsați gol pentru valoarea implicită." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "Ignoră DSCP la intrare:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Numele interfeței" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Obiectivul de latență pentru ieșire, de exemplu, 5ms [unități: s, ms sau " +"us]; lăsați gol pentru selecția automată, introduceți cuvântul default " +"pentru valoarea implicită a qdiscului." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Obiectivul de latență pentru intrare, de exemplu, 5ms [unități: s, ms sau " +"us]; lăsați gol pentru selecția automată, introduceți cuvântul default " +"pentru valoarea implicită a qdiscului." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "Adaptarea nivelului de legătură" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" +"Dimensiunea maximă pentru calcularea mărimii și a ratei, tcMTU (byte); " +"trebuie să fie >= MTU al interfeței + overhead:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" +"Dimensiunea minimă a pachetului, MPU (byte); trebuie să fie > 0 pentru " +"tabelele de dimensiuni ethernet:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" +"Numărul de intrări în tabelele de mărime/taxe, TSIZE; pentru ATM, alegeți " +"TSIZE = (tcMTU + 1) / 16:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "Per Pachet Overhead (byte):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "Disciplina cozii" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "Script de configurare a cozilor de așteptare" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "Cozi de așteptare" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" +"Discipline de coadă de așteptare utilizabile pe acest sistem. După " +"instalarea unui nou qdisc, trebuie să reporniți routerul pentru a vedea " +"actualizările!" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "SQM QoS" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" +"Afișează opțiunile avansate pentru Linklayer (necesar numai dacă MTU > 1500)" +". Opțiunile avansate vor fi utilizate numai atâta timp cât această casetă " +"este bifată." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" +"Afișați și utilizați Configurație avansată. Opțiunile avansate vor fi " +"utilizate numai atât timp cât această casetă este bifată." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" +"Afișare și utilizare Configurație periculoasă. Opțiunile periculoase vor fi " +"utilizate numai atât timp cât această casetă este bifată." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "Gestionarea inteligentă a cozilor de așteptare" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "Zdrobiți DSCP pe pachetele de intrare (intrare):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" +"Interfața grafică SQM tocmai a activat initscriptul sqm în numele " +"dumneavoastră. Nu uitați să dezactivați manual sqm initscript în meniul " +"Pornire sistem în cazul în care această modificare nu a fost dorită." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" +"Serviciul SQM pare să fie dezactivat. Vă rugăm să utilizați butonul de mai " +"jos pentru a activa acest serviciu." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" +"Viteza de încărcare (kbit/s) (ieșire) se setează la 0 pentru a dezactiva " +"selectiv modelarea la ieșire:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "Verbalitatea ieșirii SQM în jurnalul sistemului." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "Ce strat de legătură trebuie luat în considerare:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" +"Ce mecanism de adaptare a linklayer-ului trebuie utilizat; numai pentru " +"testare" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" +"Cu SQM puteți activa modelarea " +"traficului, o mai bună amestecare (Fair Queueing), gestionarea activă a " +"lungimii cozilor de așteptare (AQM) și prioritizarea pe o singură interfață " +"de rețea." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "implicit" diff --git a/luci-app-sqm-autorate/po/ru/sqm.po b/luci-app-sqm-autorate/po/ru/sqm.po new file mode 100755 index 000000000..3aa81dd5a --- /dev/null +++ b/luci-app-sqm-autorate/po/ru/sqm.po @@ -0,0 +1,222 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-10-30 16:38+0000\n" +"Last-Translator: masta0f1eave \n" +"Language-Team: Russian \n" +"Language: ru\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.9-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Строка расширенных параметров для перехода к дисциплинам исходящей очереди; " +"нет проверки ошибок, используйте очень осторожно." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Строка расширенных параметров для перехода к входящим дисциплинам очередей; " +"нет проверки ошибок, используйте очень осторожно." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Основные настройки" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Создать файл журнала для этого экземпляра SQM в папке /var/run/sqm/" +"${Interface_name}.[start|stop]-sqm.log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "Включить SQM" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Включите этот экземпляр SQM." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" +"Прямое уведомление о перегрузке сети (ECN) для входящих пакетов (ingress):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "Предоставить UCI доступ для luci-app-sqm" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" +"Жесткое ограничение на исходящие очереди; оставьте пустым для значения по " +"умолчанию." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" +"Жесткое ограничение на входящие очереди; оставьте пустым для значения по " +"умолчанию." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Имя интерфейса" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "Адаптация канального уровня" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" +"Минимальный размер пакета, MPU (байт); должен быть > 0 для таблиц размеров " +"Ethernet:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "Скрипт настройки очереди" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "Очереди" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "SQM QoS" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "Умное управление очередью" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "Детальность вывода SQM в системный журнал." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "по умолчанию" diff --git a/luci-app-sqm-autorate/po/sk/sqm.po b/luci-app-sqm-autorate/po/sk/sqm.po new file mode 100755 index 000000000..972333d16 --- /dev/null +++ b/luci-app-sqm-autorate/po/sk/sqm.po @@ -0,0 +1,208 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-12-06 14:03+0000\n" +"Last-Translator: Dušan Kazik \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 4.10-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Základné nastavenia" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/sv/sqm.po b/luci-app-sqm-autorate/po/sv/sqm.po new file mode 100755 index 000000000..fad4f0c12 --- /dev/null +++ b/luci-app-sqm-autorate/po/sv/sqm.po @@ -0,0 +1,216 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2022-01-31 14:55+0000\n" +"Last-Translator: Anders Jonsson \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.11-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Avancerad alternativsträng för att överföra till utgångskö-disciplinerna; " +"inga felkontroller, använd mycket försiktigt." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Avancerad alternativsträng för att överföra till inträde till " +"utgångskö-disciplinerna; inga felkontroller, använd mycket försiktigt." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Grundinställningar" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Skapa loggfil för denna SQM-instans under /var/run/sqm/" +"${Interface_name}.[start|stop]-sqm.log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" +"Nerladdnings hastighet (kbit/s) (inträde) ställs in på 0 för att selektivt " +"inaktivera ingångs formning:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "Aktivera SQM" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Aktivera denna SQM-instans." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Gränssnittets namn" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/templates/sqm.pot b/luci-app-sqm-autorate/po/templates/sqm.pot new file mode 100755 index 000000000..1ae5b9220 --- /dev/null +++ b/luci-app-sqm-autorate/po/templates/sqm.pot @@ -0,0 +1,265 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:207 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:204 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:75 +msgid "Autorate settings" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "Base download speed (kbit/s) (ingress):" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:110 +msgid "Base upload speed (kbit/s) (egress):" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:124 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:259 +msgid "Debug" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:90 +msgid "Enable SQM autorate" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:79 +msgid "Enable this SQM instance." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:178 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: luci-app-sqm-autorate/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:192 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:188 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:166 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:93 +msgid "Interface name" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:200 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:196 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:227 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:105 +msgid "Maximum download speed (kbit/s):" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:119 +msgid "Maximum upload speed (kbit/s):" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:237 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "Minimum download speed (kbit/s):" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:114 +msgid "Minimum upload speed (kbit/s):" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Must be set to cake if autorate is used." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:232 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:287 +msgid "Number of seconds to wait on startup:" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:255 +msgid "Output monitoring lines showing cake bandwidth changes" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:251 +msgid "Output monitoring lines showing processing stats" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:217 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:267 +msgid "Pingers numbers:" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:144 +msgid "Queue setup script" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:263 +msgid "Reflector ping interval in seconds:" +msgstr "" + +#: luci-app-sqm-autorate/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:223 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:157 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:184 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:275 +msgid "Sleep functionnality" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:84 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:279 +msgid "Threshold in Kbit/s below which dl/ul is considered idle" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:283 +msgid "" +"Time threshold to put pingers to sleep on substained dl/ul achieved rate < " +"idle_threshold" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:127 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:211 +msgid "Which link layer to account for:" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:242 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:131 +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:173 +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:179 +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:212 +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:243 +msgid "default" +msgstr "" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:271 +msgid "delay threshold in ms:" +msgstr "" diff --git a/luci-app-sqm-autorate/po/tr/sqm.po b/luci-app-sqm-autorate/po/tr/sqm.po new file mode 100755 index 000000000..c90ec8848 --- /dev/null +++ b/luci-app-sqm-autorate/po/tr/sqm.po @@ -0,0 +1,244 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-07-05 20:29+0000\n" +"Last-Translator: ToldYouThat \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.8-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Çıkış kuyruğu denetimleri için gelişmiş seçenek satırı; hata kontrolü " +"yoktur, dikkatli kullanın." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" +"Giriş kuyruğu denetimleri için gelişmiş seçenek satırı; hata kontrolü " +"yoktur, dikkatli kullanın." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "Temel Ayarlar" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"Bu SQM örneği için /var/run/sqm/${Interface_name}.[start|stop]-sqm.log " +"konumda günlük dosyası oluşturun." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" +"İndirme hızı (kbit/s) (giriş) Şekillendirmeyi devre dışı bırakmak için 0 " +"olarak ayarlayın:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "SQM'i etkinleştir" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "Bu SQM örneğini etkinleştirin." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "Gelen paketlerde (giriş) açık tıkanıklık bildirimi (ECN) durumu:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "Giden paketlerde (çıkış) açık tıkanıklık bildirimi (ECN) durumu." + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "luci-app-sqm için UCI erişimi verin" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "Çıkış kuyrukları için kesin sınır; varsayılan ayar için boş bırakın." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "Giriş kuyrukları için kesin sınır; varsayılan ayar için boş bırakın." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "Giriş kuyruğunda DSCP'yi yoksay:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Arayüz ismi" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Çıkış için gecikme hedefi, örn. 5ms [birimler: s, ms, ya da us]; otomatik " +"seçim için boş bırakın, qdisc'in varsayılan ayarı için \"default\" yazın." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"Giriş için gecikme hedefi, örn. 5ms [birimler: s, ms, ya da us]; otomatik " +"seçim için boş bırakın, qdisc'in varsayılan ayarı için \"default\" yazın." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "Bağlantı Katmanı Uyarlaması" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" +"Boyut ve hız hesaplamaları için Maksimum Boyut, tcMTU (bayt); arayüzün MTU " +"değeri ve overhead toplamından büyük olması gerekir:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" +"Minimum paket boyutu, MPU (bayt); ethernet boyut tablosu için sıfırdan (0) " +"büyük olmalıdır:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" +"Boyut/hız tabloları için girdi sayıları, TSIZE; ATM için TSIZE = (tcMTU + " +"1) / 16:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "Paket Başına Ek Yük (bayt):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "Kuyruk Denetimi" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "Kuyruk kurulum betiği" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "Kuyruklar" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" +"Bu sistemde kuyruk denetimleri kullanılabilir. Yeni bir qdisc yükledikten " +"sonra, devreye girmesi için yönlendiriciyi yeniden başlatmanız gerekir." + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "SQM QoS" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" +"Gelişmiş bağlantı katmanı ayarlarını göster, (sadece MTU 1500'den büyükse " +"gereklidir). Gelişmiş seçenekler yalnızca bu kutu işaretliyken kullanılır." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" +"Gelişmiş Ayarları Göster ve kullan. Gelişmiş seçenekler yalnızca bu kutu " +"işaretliyken kullanılır." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" +"Tehlikeli Ayarları Göster ve Kullan. Tehlikeli olabilecek seçenekler " +"yalnızca bu kutu işaretliyken kullanılacaktır." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "Akıllı Kuyruk Yönetimi (SQM)" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "Gelen paketlerde (giriş) DSCP'yi sıkıştır:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" +"SQM GUI, sizin adınıza sqm initscript'i etkinleştirdi. Bu değişikliğin " +"istenmemesi durumunda sqm initscript'i System Startup menüsünden manuel " +"olarak devre dışı bırakmayı unutmayın." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" +"Bu SQM servisi devre dışı görünüyor. Servisi aktif etmek için lütfen alttaki " +"butonu kullanın." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" +"Yükleme hızı (kbit/s) (çıkış) Şekillendirmeyi devre dışı bırakmak için 0 " +"olarak ayarlayın:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "SQM çıktısının sistem günlüğü ayrıntısı." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "Bağlantı katmanı seçimi:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "Bağlantı katmanı uyarlama tekniği; yalnızca test için" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" +"SQM ile; trafik şekillendirme, " +"daha iyi sıkıştırma (Adil Kuyruklama), etkin kuyruk uzunluğu yönetimi (AQM) " +"ve bir ağ arayüzünü önceliklendirme gibi işlemler yapabilirsiniz." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "varsayılan" diff --git a/luci-app-sqm-autorate/po/uk/sqm.po b/luci-app-sqm-autorate/po/uk/sqm.po new file mode 100755 index 000000000..086b3c30c --- /dev/null +++ b/luci-app-sqm-autorate/po/uk/sqm.po @@ -0,0 +1,209 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2020-04-07 18:07+0000\n" +"Last-Translator: Yurii Petrashko \n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" +"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.0-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "Назва інтерфейсу" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "" diff --git a/luci-app-sqm-autorate/po/vi/sqm.po b/luci-app-sqm-autorate/po/vi/sqm.po new file mode 100755 index 000000000..da12d68ad --- /dev/null +++ b/luci-app-sqm-autorate/po/vi/sqm.po @@ -0,0 +1,208 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2020-11-21 12:21+0000\n" +"Last-Translator: Darias \n" +"Language-Team: Vietnamese \n" +"Language: vi\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.4-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "Mặc định" diff --git a/luci-app-sqm-autorate/po/zh_Hans/sqm.po b/luci-app-sqm-autorate/po/zh_Hans/sqm.po new file mode 100755 index 000000000..45eda0b1b --- /dev/null +++ b/luci-app-sqm-autorate/po/zh_Hans/sqm.po @@ -0,0 +1,217 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2022-04-22 07:14+0000\n" +"Last-Translator: 王攀 <41330784@qq.com>\n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.12-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "传递到出站队列规则的高级选项字符串;不会进行错误检查,请谨慎使用。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "传递到入站队列规则的高级选项字符串;不会进行错误检查,请谨慎使用。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "基本设置" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "" +"在此 /var/run/sqm/${Interface_name} 下为此 SQM 实例创建日志文件。[start|stop]-sqm.log." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "下载速度(kbit/s)(入口) 设为 0 时,有选择地禁用入口整形:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "启用 SQM" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "启用此 SQM 实例." + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "入站数据包的显式拥塞通知(ECN)状态:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "出站数据包的显式拥塞通知(ECN)状态." + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "授予 UCI 访问 luci-app-sqm 的权限" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "出口队列的硬限制; 默认留空。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "入口队列的硬限制; 默认留空。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "在入口忽略 DSCP:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "接口名称" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "出口的延迟目标,例如 5ms [单位:s、ms或us]; " +"为自动选择留空,为qdisc的默认值输入单词default。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "入口的延迟目标,例如 5ms [单位:s、ms 或 us]; " +"为自动选择留空,为qdisc的默认值输入单词default。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "链路层适应" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "大小和速率计算的最大大小,tcMTU(字节); 需要 >= 接口 MTU + 开销:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "最小数据包大小,MPU(byte); 在以太网中需要 >0 :" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "大小/费率表中的条目数,TSIZE; 对于 ATM,选择 TSIZE = (tcMTU + 1) / 16:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "每个数据包开销(字节):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "列队规则" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "队列设置脚本" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "队列" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "队列规则(需要重启路由器)!" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "服务质量管理" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" +"显示高级链路选项,(仅在MTU> 1500时才需要)。 只有选中此框时,才会使用高级选" +"项。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "显示和使用高级配置。 只有在选中此框时,只会使用高级选项。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "显示和使用危险配置。 只要选中此框,就会使用危险选项。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "智能队列管理" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "在入站数据包(入口)上压缩 DSCP:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" +"你刚刚开启了SQM随机启动功能,如果你不希望SQM随机启动,可以在系统启动菜单下手" +"动禁用。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "SQM服务似乎已被禁用。请使用下面的按钮来激活这项服务。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "上传速度 (kbit/s)(出口)设置为 0 以选择性地禁用出口整形:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "SQM 输出到系统日志的详细程度。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "要考虑哪个链路层:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "使用哪个链路适应机制; 仅用于测试" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" +"使用 SQM 你可以启用流量整形,更好的混合" +"(公平列队)主动列队管理(AQM) 并设置网络接口优先级。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "默认" diff --git a/luci-app-sqm-autorate/po/zh_Hant/sqm.po b/luci-app-sqm-autorate/po/zh_Hant/sqm.po new file mode 100755 index 000000000..33dc43351 --- /dev/null +++ b/luci-app-sqm-autorate/po/zh_Hant/sqm.po @@ -0,0 +1,218 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-08-14 14:43+0000\n" +"Last-Translator: Hulen \n" +"Language-Team: Chinese (Traditional) \n" +"Language: zh_Hant\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.8-dev\n" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:183 +msgid "" +"Advanced option string to pass to the egress queueing disciplines; no error " +"checking, use very carefully." +msgstr "傳遞到出站佇列規則的進階選項字串,沒有錯誤檢查,請謹慎使用。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:180 +msgid "" +"Advanced option string to pass to the ingress queueing disciplines; no error " +"checking, use very carefully." +msgstr "傳遞到入站佇列規則的進階選項字串,沒有錯誤檢查,請謹慎使用。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:72 +msgid "Basic Settings" +msgstr "基本設定" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "" +"Create log file for this SQM instance under /var/run/sqm/${Interface_name}." +"[start|stop]-sqm.log." +msgstr "建立日誌檔案 (/var/run/sqm/${Interface_name}.[start|stop]-sqm.log)。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:92 +msgid "" +"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress " +"shaping:" +msgstr "下載速度 (kbit/s) (0-無限制):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58 +msgid "Enable SQM" +msgstr "啟用 SQM" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:78 +msgid "Enable this SQM instance." +msgstr "啟用 SQM。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:148 +msgid "" +"Explicit congestion notification (ECN) status on inbound packets (ingress):" +msgstr "傳入封包(入口)上的顯式擁塞通知 (ECN)狀態:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:154 +msgid "" +"Explicit congestion notification (ECN) status on outbound packets (egress)." +msgstr "傳出封包(出口)上的顯式擁塞通知(ECN)狀態。" + +#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3 +msgid "Grant UCI access for luci-app-sqm" +msgstr "授予 luci-app-sqm 擁有 UCI 存取的權限" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:168 +msgid "Hard limit on egress queues; leave empty for default." +msgstr "嚴格限制出口隊列;預設保留為空。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:164 +msgid "Hard limit on ingress queues; leave empty for default." +msgstr "對入口隊列的硬限制;預設保留為空。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142 +msgid "Ignore DSCP on ingress:" +msgstr "在進入時忽略DSCP:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89 +msgid "Interface name" +msgstr "介面名稱" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:176 +msgid "" +"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"出口的延遲目標,例如5ms [單位: s、ms、或us];留空以進行自動選擇,在qdisc的預" +"設值中輸入default。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172 +msgid "" +"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for " +"automatic selection, put in the word default for the qdisc's default." +msgstr "" +"進入的延遲目標,例如5ms [單位: s、ms、或us];留空以進行自動選擇,在qdisc的預" +"設值中輸入default。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74 +msgid "Link Layer Adaptation" +msgstr "連結層適應" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:203 +msgid "" +"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= " +"interface MTU + overhead:" +msgstr "用於大小和速率計算的最大大小,tcMTU (位元組);需要≧介面MTU +開銷:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213 +msgid "" +"Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:" +msgstr "最小封包大小,MPU(位元組);對於乙太網大小表,必須>0:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:208 +msgid "" +"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU " +"+ 1) / 16:" +msgstr "大小/費率表中的條目數,TSIZE;對於ATM,選擇TSIZE = (tcMTU + 1)/ 16:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193 +msgid "Per Packet Overhead (byte):" +msgstr "每個封包開銷(位元組):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73 +msgid "Queue Discipline" +msgstr "佇列規則" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120 +msgid "Queue setup script" +msgstr "佇列設定指令碼" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:71 +msgid "Queues" +msgstr "佇列" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:112 +msgid "" +"Queuing disciplines useable on this system. After installing a new qdisc, " +"you need to restart the router to see updates!" +msgstr "安裝新的佇列規則後,需要重新啟動路由器!" + +#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3 +msgid "SQM QoS" +msgstr "SQM QoS頻寬管理" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:199 +msgid "" +"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced " +"options will only be used as long as this box is checked." +msgstr "" +"顯示 高級連接層選項 , (僅當MTU> 1500時才需要)。僅在選中此框時,才使用高級選" +"項。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133 +msgid "" +"Show and Use Advanced Configuration. Advanced options will only be used as " +"long as this box is checked." +msgstr "顯示使用進階選項,只有選取此選取框時,才會使用進階選項。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160 +msgid "" +"Show and Use Dangerous Configuration. Dangerous options will only be used as " +"long as this box is checked." +msgstr "顯示和使用危險組態。僅在選中此復選框後,才會使用危險選項。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64 +msgid "Smart Queue Management" +msgstr "智慧隊列管理" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Squash DSCP on inbound packets (ingress):" +msgstr "在傳入封包(入口)上壓縮DSCP:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83 +msgid "" +"The SQM GUI has just enabled the sqm initscript on your behalf. Remember to " +"disable the sqm initscript manually under System Startup menu in case this " +"change was not wished for." +msgstr "" +"此 SQM GUI 剛剛代表您啟用了sqm初始化指令碼。切記在「系統啟動」選單下,手動停" +"用sqm初始化指令碼,以防意外變更。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48 +msgid "" +"The SQM service seems to be disabled. Please use the button below to " +"activate this service." +msgstr "SQM 服務似乎已被停用。請使用下面的按鈕來啟動這項服務。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "" +"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress " +"shaping:" +msgstr "上傳速度 (kbit/s) (0-無限制):" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103 +msgid "Verbosity of SQM's output into the system log." +msgstr "日誌等級。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187 +msgid "Which link layer to account for:" +msgstr "連結層:" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218 +msgid "Which linklayer adaptation mechanism to use; for testing only" +msgstr "使用哪種連接層適配機制;僅用於測試" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65 +msgid "" +"With SQM you can enable " +"traffic shaping, better mixing (Fair Queueing), active queue length " +"management (AQM) and prioritisation on one network interface." +msgstr "" +"使用 SQM 您可以啟用流量整形,更" +"好的混合 (公平佇列),主動佇列管理 (AQM) 並設定網路介面優先順序。" + +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:155 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:188 +#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 +msgid "default" +msgstr "預設" diff --git a/luci-app-sqm-autorate/root/etc/init.d/sqm-autorate b/luci-app-sqm-autorate/root/etc/init.d/sqm-autorate new file mode 100755 index 000000000..3f2d5c87d --- /dev/null +++ b/luci-app-sqm-autorate/root/etc/init.d/sqm-autorate @@ -0,0 +1,62 @@ +#!/bin/sh /etc/rc.common +# shellcheck disable=SC2039 +# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : +# Copyright (C) 2018-2022 Ycarus (Yannick Chabanois) +# Released under GPL 3. See LICENSE for the full terms. + +# shellcheck disable=SC2034 +{ + START=90 + STOP=10 + USE_PROCD=1 +} + +. /usr/lib/unbound/iptools.sh +. /lib/functions/network.sh + +_config_autorate() { + logger -t "SQM-autorate" "Set config for $1" + config_get enabled "$1" enabled + [ "${enabled}" != "1" ] && return + config_get autorate "$1" autorate + [ "${autorate}" != "1" ] && return + + config_get min_download "$1" min_download "0" + config_get download "$1" download "0" + config_get max_download "$1" max_download "0" + [ "${min_download}" == "0" ] || [ "${max_download}" == "0" ] || [ "${download}" == "0" ] && return + config_get min_upload "$1" min_upload "0" + config_get upload "$1" upload "0" + config_get max_upload "$1" max_upload "0" + [ "${min_upload}" == "0" ] || [ "${max_upload}" == "0" ] || [ "${upload}" == "0" ] && return +# config_get interface "$1" interface +# cp /usr/share/sqm-autorate/cake-autorate_template.sh /usr/share/sqm-autorate/cake-autorate_config.${interface}.sh + cp /usr/share/sqm-autorate/config_template.sh /usr/share/sqm-autorate/config.$1.sh +} + +_launch_autorate() { + logger -t "SQM-autorate" "Launch..." + procd_open_instance + # shellcheck disable=SC2086 + procd_set_param command /usr/share/sqm-autorate/launcher.sh + procd_set_param limits nofile="51200 51200" + procd_set_param respawn 0 10 0 + procd_set_param stderr 1 + procd_close_instance +} + +start_service() { + rm -f /usr/share/sqm-autorate/config.*.sh + config_load sqm + config_foreach _config_autorate queue + _launch_autorate +} + +reload_service() { + stop + start +} + +service_triggers() { + procd_add_reload_trigger sqm +} \ No newline at end of file diff --git a/luci-app-sqm-autorate/root/etc/uci-defaults/50-luci-sqm b/luci-app-sqm-autorate/root/etc/uci-defaults/50-luci-sqm new file mode 100755 index 000000000..7f472f725 --- /dev/null +++ b/luci-app-sqm-autorate/root/etc/uci-defaults/50-luci-sqm @@ -0,0 +1,17 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@sqm[-1] + add ucitrack sqm + set ucitrack.@sqm[-1].init=sqm + del_list ucitrack.@firewall[0].affects=sqm + add_list ucitrack.@firewall[0].affects=sqm + delete ucitrack.@sqm-autorate[-1] + add ucitrack sqm-autorate + set ucitrack.@sqm-autorate[-1].init=sqm-autorate + del_list ucitrack.@firewall[0].affects=sqm-autorate + add_list ucitrack.@firewall[0].affects=sqm-autorate + commit ucitrack +EOF + +exit 0 diff --git a/luci-app-sqm-autorate/root/root/cake-autorate b/luci-app-sqm-autorate/root/root/cake-autorate new file mode 120000 index 000000000..66f5d6886 --- /dev/null +++ b/luci-app-sqm-autorate/root/root/cake-autorate @@ -0,0 +1 @@ +../usr/share/sqm-autorate \ No newline at end of file diff --git a/luci-app-sqm-autorate/root/usr/share/luci/menu.d/luci-app-sqm.json b/luci-app-sqm-autorate/root/usr/share/luci/menu.d/luci-app-sqm.json new file mode 100755 index 000000000..6c5ff4fa6 --- /dev/null +++ b/luci-app-sqm-autorate/root/usr/share/luci/menu.d/luci-app-sqm.json @@ -0,0 +1,13 @@ +{ + "admin/network/sqm": { + "title": "SQM QoS", + "order": 59, + "action": { + "type": "view", + "path": "network/sqm" + }, + "depends": { + "acl": [ "luci-app-sqm" ] + } + } +} diff --git a/luci-app-sqm-autorate/root/usr/share/rpcd/acl.d/luci-app-sqm.json b/luci-app-sqm-autorate/root/usr/share/rpcd/acl.d/luci-app-sqm.json new file mode 100755 index 000000000..810d91b83 --- /dev/null +++ b/luci-app-sqm-autorate/root/usr/share/rpcd/acl.d/luci-app-sqm.json @@ -0,0 +1,23 @@ +{ + "luci-app-sqm": { + "description": "Grant UCI access for luci-app-sqm", + "read": { + "file": { + "/var/run/sqm/available_qdiscs": [ "list" ], + "/usr/lib/sqm/*.qos.help": [ "read" ], + "/etc/init.d/sqm enable" : [ "exec" ], + "/etc/init.d/sqm start" : [ "exec" ], + "/etc/init.d/sqm-autorate enable" : [ "exec" ], + "/etc/init.d/sqm-autorate start" : [ "exec" ] + }, + "uci": [ "sqm" ], + "ubus": { + "file": [ "read", "list" ], + "luci": [ "setInitAction" ] + } + }, + "write": { + "uci": [ "sqm" ] + } + } +} diff --git a/luci-app-sqm-autorate/root/usr/share/sqm-autorate/cake-autorate.sh b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/cake-autorate.sh new file mode 100755 index 000000000..6067cdca8 --- /dev/null +++ b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/cake-autorate.sh @@ -0,0 +1,2270 @@ +#!/bin/bash + +# cake-autorate automatically adjusts CAKE bandwidth(s) +# in dependence on: a) receive and transmit transfer rates; and b) latency +# (or can just be used to monitor and log transfer rates and latency) + +# requires: bash; and one of the supported ping binaries + +# each cake-autorate instance must be configured using a corresponding config file + +# Project homepage: https://github.com/lynxthecat/cake-autorate +# Licence details: https://github.com/lynxthecat/cake-autorate/blob/master/LICENCE.md + +# Author and maintainer: lynxthecat +# Contributors: rany2; moeller0; richb-hanover + +cake_autorate_version="2.0.0" + +## cake-autorate uses multiple asynchronous processes including: +## main - main process +## monitor_achieved_rates - monitor network transfer rates +## maintain_pingers - manage pingers and active reflectors +## parse_${pinger_binary} - control and parse ping responses +## parse_preprocessor - prepend field for parse_${pinger_binary} +## maintain_log_file - maintain and rotate log file +## +## IPC is facilitated via FIFOs in the form of anonymous pipes +## accessible via fds in the form: ${process_name_fd} +## thereby to enable transferring instructions and data between processes + +# Initialize file descriptors +## -1 signifies that the log file fd will not be used and +## that the log file will be written to directly +log_fd=-1 +exec {main_fd}<> <(:) +exec {monitor_achieved_rates_fd}<> <(:) +exec {maintain_pingers_fd}<> <(:) +# pinger_fds are set below in dependence upon ping binary and number of pingers + +# process pids are stored below in the form +# proc_pids['process_identifier']=${!} +declare -A proc_pids + +# Bash correctness options +## Disable globbing (expansion of *). +set -f +## Forbid using unset variables. +set -u +## The exit status of a pipeline is the status of the last +## command to exit with a non-zero status, or zero if no +## command exited with a non-zero status. +set -o pipefail + +## Errors are intercepted via intercept_stderr below +## and sent to the log file and system log + +# Possible performance improvement +export LC_ALL=C + +# Set PREFIX +PREFIX=/root/cake-autorate + +# shellcheck source=lib.sh +. "${PREFIX}/lib.sh" +# shellcheck source=defaults.sh +. "${PREFIX}/defaults.sh" +# get valid config overrides +mapfile -t valid_config_entries < <(grep -E '^[^(#| )].*=' "${PREFIX}/defaults.sh" | sed -e 's/[\t ]*\#.*//g' -e 's/=.*//g') + +trap cleanup_and_killall INT TERM EXIT + +cleanup_and_killall() +{ + # Do not fail on error for this critical cleanup code + set +e + + trap true INT TERM EXIT + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + log_msg "INFO" "Stopping cake-autorate with PID: ${BASHPID} and config: ${config_path}" + + log_msg "INFO" "Killing all background processes and cleaning up temporary files." + + printf "TERMINATE\n" >&"${maintain_pingers_fd}" + printf "TERMINATE\n" >&"${monitor_achieved_rates_fd}" + + [[ -d "${run_path}" ]] && rm -r "${run_path}" + rmdir /var/run/cake-autorate 2>/dev/null + + # give some time for processes to gracefully exit + sleep_s 1 + + # terminate any processes that remain, save for main and intercept_stderr + unset "proc_pids[main]" + intercept_stderr_pid="${proc_pids[intercept_stderr]:-}" + if [[ -n "${intercept_stderr_pid}" ]] + then + unset "proc_pids[intercept_stderr]" + fi + terminate "${proc_pids[@]}" + + # restore original stderr, and terminate intercept_stderr + if [[ -n "${intercept_stderr_pid}" ]] + then + exec 2>&"${original_stderr_fd}" + terminate "${intercept_stderr_pid}" + fi + + log_msg "SYSLOG" "Stopped cake-autorate with PID: ${BASHPID} and config: ${config_path}" + + trap - INT TERM EXIT + exit +} + +log_msg() +{ + # send logging message to terminal, log file fifo, log file and/or system logger + + local type="${1}" + local msg="${2}" + local instance_id="${instance_id:-"unknown"}" + local log_timestamp=${EPOCHREALTIME} + + case ${type} in + + DEBUG) + ((debug == 0)) && return # skip over DEBUG messages where debug disabled + ((log_DEBUG_messages_to_syslog)) && ((use_logger)) && logger -t "cake-autorate.${instance_id}" "${type}: ${log_timestamp} ${msg}" + ;; + + ERROR) + ((use_logger)) && logger -t "cake-autorate.${instance_id}" "${type}: ${log_timestamp} ${msg}" + ;; + + SYSLOG) + ((use_logger)) && logger -t "cake-autorate.${instance_id}" "INFO: ${log_timestamp} ${msg}" + ;; + + *) + ;; + esac + + # Output to the log file fifo if available (for rotation handling) + # else output directly to the log file + if (( log_fd >= 0 )) + then + ((log_to_file)) && printf '%s; %(%F-%H:%M:%S)T; %s; %s\n' "${type}" -1 "${log_timestamp}" "${msg}" >&"${log_fd}" + else + ((log_to_file)) && printf '%s; %(%F-%H:%M:%S)T; %s; %s\n' "${type}" -1 "${log_timestamp}" "${msg}" >> "${log_file_path}" + fi + + ((terminal)) && printf '%s; %(%F-%H:%M:%S)T; %s; %s\n' "${type}" -1 "${log_timestamp}" "${msg}" +} + +print_headers() +{ + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + header="DATA_HEADER; LOG_DATETIME; LOG_TIMESTAMP; PROC_TIME_US; DL_ACHIEVED_RATE_KBPS; UL_ACHIEVED_RATE_KBPS; DL_LOAD_PERCENT; UL_LOAD_PERCENT; RTT_TIMESTAMP; REFLECTOR; SEQUENCE; DL_OWD_BASELINE; DL_OWD_US; DL_OWD_DELTA_EWMA_US; DL_OWD_DELTA_US; DL_ADJ_DELAY_THR; UL_OWD_BASELINE; UL_OWD_US; UL_OWD_DELTA_EWMA_US; UL_OWD_DELTA_US; UL_ADJ_DELAY_THR; SUM_DL_DELAYS; SUM_UL_DELAYS; DL_LOAD_CONDITION; UL_LOAD_CONDITION; CAKE_DL_RATE_KBPS; CAKE_UL_RATE_KBPS" + ((log_to_file)) && printf '%s\n' "${header}" >> "${log_file_path}" + ((terminal)) && printf '%s\n' "${header}" + + header="LOAD_HEADER; LOG_DATETIME; LOG_TIMESTAMP; PROC_TIME_US; DL_ACHIEVED_RATE_KBPS; UL_ACHIEVED_RATE_KBPS; CAKE_DL_RATE_KBPS; CAKE_UL_RATE_KBPS" + ((log_to_file)) && printf '%s\n' "${header}" >> "${log_file_path}" + ((terminal)) && printf '%s\n' "${header}" + + header="REFLECTOR_HEADER; LOG_DATETIME; LOG_TIMESTAMP; PROC_TIME_US; REFLECTOR; MIN_SUM_OWD_BASELINES_US; SUM_OWD_BASELINES_US; SUM_OWD_BASELINES_DELTA_US; SUM_OWD_BASELINES_DELTA_THR_US; MIN_DL_DELTA_EWMA_US; DL_DELTA_EWMA_US; DL_DELTA_EWMA_DELTA_US; DL_DELTA_EWMA_DELTA_THR; MIN_UL_DELTA_EWMA_US; UL_DELTA_EWMA_US; UL_DELTA_EWMA_DELTA_US; UL_DELTA_EWMA_DELTA_THR" + ((log_to_file)) && printf '%s\n' "${header}" >> "${log_file_path}" + ((terminal)) && printf '%s\n' "${header}" +} + +# MAINTAIN_LOG_FILE + HELPER FUNCTIONS + +rotate_log_file() +{ + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + if [[ -f ${log_file_path} ]] + then + cat "${log_file_path}" > "${log_file_path}.old" + true > "${log_file_path}" + fi + + ((output_processing_stats)) && print_headers + t_log_file_start_us=${EPOCHREALTIME/./} + get_log_file_size_bytes +} + +reset_log_file() +{ + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + rm -f "${log_file_path}.old" + true > "${log_file_path}" + + ((output_processing_stats)) && print_headers + t_log_file_start_us=${EPOCHREALTIME/./} + get_log_file_size_bytes +} + +generate_log_file_scripts() +{ + cat > "${run_path}/log_file_export" <<- EOT + #!/bin/bash + + timeout_s=\${1:-20} + + if kill -USR1 "${proc_pids['maintain_log_file']}" + then + printf "Successfully signalled maintain_log_file process to request log file export.\n" + else + printf "ERROR: Failed to signal maintain_log_file process.\n" >&2 + exit 1 + fi + rm -f "${run_path}/last_log_file_export" + + read_try=0 + + while [[ ! -f "${run_path}/last_log_file_export" ]] + do + sleep 1 + if (( ++read_try >= \${timeout_s} )) + then + printf "ERROR: Timeout (\${timeout_s}s) reached before new log file export identified.\n" >&2 + exit 1 + fi + done + + read -r log_file_export_path < "${run_path}/last_log_file_export" + + printf "Log file export complete.\n" + + printf "Log file available at location: " + printf "\${log_file_export_path}\n" + EOT + + cat > "${run_path}/log_file_reset" <<- EOT + #!/bin/bash + + if kill -USR2 "${proc_pids['maintain_log_file']}" + then + printf "Successfully signalled maintain_log_file process to request log file reset.\n" + else + printf "ERROR: Failed to signal maintain_log_file process.\n" >&2 + exit 1 + fi + EOT + + chmod +x "${run_path}/log_file_export" "${run_path}/log_file_reset" +} + +export_log_file() +{ + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + printf -v log_file_export_datetime '%(%Y_%m_%d_%H_%M_%S)T' + log_file_export_path="${log_file_path/.log/_${log_file_export_datetime}.log}" + log_msg "DEBUG" "Exporting log file with path: ${log_file_path/.log/_${log_file_export_datetime}.log}" + + # Now export with or without compression to the appropriate export path + if ((log_file_export_compress)) + then + log_file_export_path="${log_file_export_path}.gz" + if [[ -f "${log_file_path}.old" ]] + then + gzip -c "${log_file_path}.old" > "${log_file_export_path}" + gzip -c "${log_file_path}" >> "${log_file_export_path}" + else + gzip -c "${log_file_path}" > "${log_file_export_path}" + fi + else + if [[ -f "${log_file_path}.old" ]] + then + cp "${log_file_path}.old" "${log_file_export_path}" + cat "${log_file_path}" >> "${log_file_export_path}" + else + cp "${log_file_path}" "${log_file_export_path}" + fi + fi + + printf '%s' "${log_file_export_path}" > "${run_path}/last_log_file_export" +} + +flush_log_fd() +{ + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + while read -r -t 0 -u "${log_fd}" + do + read -r -u "${log_fd}" log_line + printf '%s\n' "${log_line}" >> "${log_file_path}" + done +} + +get_log_file_size_bytes() +{ + log_file_size_bytes=$(wc -c "${log_file_path}" 2>/dev/null | awk '{print $1}') + log_file_size_bytes=${log_file_size_bytes:-0} +} + +kill_maintain_log_file() +{ + trap - TERM EXIT + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + flush_log_fd + exit +} + +maintain_log_file() +{ + trap '' INT + trap 'kill_maintain_log_file' TERM EXIT + trap 'export_log_file' USR1 + trap 'reset_log_file_signalled=1' USR2 + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + reset_log_file_signalled=0 + t_log_file_start_us=${EPOCHREALTIME/./} + + get_log_file_size_bytes + + while read -r -u "${log_fd}" log_line + do + + printf '%s\n' "${log_line}" >> "${log_file_path}" + + # Verify log file size < configured maximum + # The following two lines with costly call to 'du': + # read log_file_size_bytes< <(du -b ${log_file_path}/cake-autorate.log) + # log_file_size_bytes=${log_file_size_bytes//[!0-9]/} + # can be more efficiently handled with this line: + ((log_file_size_bytes=log_file_size_bytes+${#log_line}+1)) + + # Verify log file time < configured maximum + if (( (${EPOCHREALTIME/./}-t_log_file_start_us) > log_file_max_time_us )) + then + + log_msg "DEBUG" "log file maximum time: ${log_file_max_time_mins} minutes has elapsed so flushing and rotating log file." + flush_log_fd + rotate_log_file + elif (( log_file_size_bytes > log_file_max_size_bytes )) + then + log_file_size_KB=$((log_file_size_bytes/1024)) + log_msg "DEBUG" "log file size: ${log_file_size_KB} KB has exceeded configured maximum: ${log_file_max_size_KB} KB so flushing and rotating log file." + flush_log_fd + rotate_log_file + elif (( reset_log_file_signalled )) + then + log_msg "DEBUG" "received log file reset signal so flushing and resetting log file." + flush_log_fd + reset_log_file + reset_log_file_signalled=0 + fi + + done +} + +update_shaper_rate() +{ + local direction="${1}" # 'dl' or 'ul' + + case "${load_condition["${direction}"]}" in + + # upload Starlink satelite switching compensation, so drop down to minimum rate for upload through switching period + ul*sss) + shaper_rate_kbps["${direction}"]="${min_shaper_rate_kbps[${direction}]}" + ;; + # download Starlink satelite switching compensation, so drop down to base rate for download through switching period + dl*sss) + shaper_rate_kbps["${direction}"]=$(( shaper_rate_kbps["${direction}"] > base_shaper_rate_kbps["${direction}"] ? base_shaper_rate_kbps["${direction}"] : shaper_rate_kbps["${direction}"] )) + ;; + # bufferbloat detected, so decrease the rate providing not inside bufferbloat refractory period + *bb*) + if (( t_start_us > (t_last_bufferbloat_us["${direction}"]+bufferbloat_refractory_period_us) )) + then + adjusted_achieved_rate_kbps=$(( (achieved_rate_kbps["${direction}"]*achieved_rate_adjust_down_bufferbloat)/1000 )) + adjusted_shaper_rate_kbps=$(( (shaper_rate_kbps["${direction}"]*shaper_rate_adjust_down_bufferbloat)/1000 )) + shaper_rate_kbps["${direction}"]=$(( adjusted_achieved_rate_kbps > min_shaper_rate_kbps["${direction}"] && adjusted_achieved_rate_kbps < adjusted_shaper_rate_kbps ? adjusted_achieved_rate_kbps : adjusted_shaper_rate_kbps )) + t_last_bufferbloat_us["${direction}"]="${EPOCHREALTIME/./}" + fi + ;; + # high load, so increase rate providing not inside bufferbloat refractory period + *high*) + if (( t_start_us > (t_last_bufferbloat_us["${direction}"]+bufferbloat_refractory_period_us) )) + then + shaper_rate_kbps["${direction}"]=$(( (shaper_rate_kbps["${direction}"]*shaper_rate_adjust_up_load_high)/1000 )) + fi + ;; + # low or idle load, so determine whether to decay down towards base rate, decay up towards base rate, or set as base rate + *low*|*idle*) + if (( t_start_us > (t_last_decay_us["${direction}"]+decay_refractory_period_us) )) + then + + if ((shaper_rate_kbps["${direction}"] > base_shaper_rate_kbps["${direction}"])) + then + decayed_shaper_rate_kbps=$(( (shaper_rate_kbps["${direction}"]*shaper_rate_adjust_down_load_low)/1000 )) + shaper_rate_kbps["${direction}"]=$(( decayed_shaper_rate_kbps > base_shaper_rate_kbps["${direction}"] ? decayed_shaper_rate_kbps : base_shaper_rate_kbps["${direction}"])) + elif ((shaper_rate_kbps["${direction}"] < base_shaper_rate_kbps["${direction}"])) + then + decayed_shaper_rate_kbps=$(( (shaper_rate_kbps["${direction}"]*shaper_rate_adjust_up_load_low)/1000 )) + shaper_rate_kbps["${direction}"]=$(( decayed_shaper_rate_kbps < base_shaper_rate_kbps["${direction}"] ? decayed_shaper_rate_kbps : base_shaper_rate_kbps["${direction}"])) + fi + + t_last_decay_us["${direction}"]="${EPOCHREALTIME/./}" + fi + ;; + *) + log_msg "ERROR" "unknown load condition: ${load_condition[${direction}]} in update_shaper_rate" + kill $$ 2>/dev/null + ;; + esac + # make sure to only return rates between cur_min_rate and cur_max_rate + ((shaper_rate_kbps["${direction}"] < min_shaper_rate_kbps["${direction}"])) && shaper_rate_kbps["${direction}"]="${min_shaper_rate_kbps[${direction}]}" + ((shaper_rate_kbps["${direction}"] > max_shaper_rate_kbps["${direction}"])) && shaper_rate_kbps["${direction}"]="${max_shaper_rate_kbps[${direction}]}" +} + +monitor_achieved_rates() +{ + trap '' INT + + # track rx and tx bytes transfered and divide by time since last update + # to determine achieved dl and ul transfer rates + + local rx_bytes_path="${1}" + local tx_bytes_path="${2}" + local monitor_achieved_rates_interval_us="${3}" # (microseconds) + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + compensated_monitor_achieved_rates_interval_us="${monitor_achieved_rates_interval_us}" + + [[ -f "${rx_bytes_path}" ]] && { read -r prev_rx_bytes < "${rx_bytes_path}"; } 2> /dev/null || prev_rx_bytes=0 + [[ -f "${tx_bytes_path}" ]] && { read -r prev_tx_bytes < "${tx_bytes_path}"; } 2> /dev/null || prev_tx_bytes=0 + + sleep_duration_s=0 + t_start_us=0 + + declare -A achieved_rate_kbps + declare -A load_percent + + while true + do + t_start_us="${EPOCHREALTIME/./}" + + while read -r -t 0 -u "${monitor_achieved_rates_fd}" + do + unset command + read -r -u "${monitor_achieved_rates_fd}" -a command + case "${command[0]:-}" in + + SET_VAR) + if [[ "${#command[@]}" -eq 3 ]] + then + export -n "${command[1]}=${command[2]}" + fi + ;; + SET_ARRAY_ELEMENT) + if [[ "${#command[@]}" -eq 4 ]] + then + declare -A "${command[1]}"+="([${command[2]}]=${command[3]})" + fi + ;; + TERMINATE) + log_msg "DEBUG" "Terminating monitor_achieved_rates." + exit + ;; + *) + : + ;; + esac + done + + # If rx/tx bytes file exists, read it in, otherwise set to prev_bytes + # This addresses interfaces going down and back up + [[ -f "${rx_bytes_path}" ]] && { read -r rx_bytes < "${rx_bytes_path}"; } 2> /dev/null || rx_bytes="${prev_rx_bytes}" + [[ -f "${tx_bytes_path}" ]] && { read -r tx_bytes < "${tx_bytes_path}"; } 2> /dev/null || tx_bytes="${prev_tx_bytes}" + + achieved_rate_kbps[dl]=$(( (8000*(rx_bytes - prev_rx_bytes)) / compensated_monitor_achieved_rates_interval_us )) + achieved_rate_kbps[ul]=$(( (8000*(tx_bytes - prev_tx_bytes)) / compensated_monitor_achieved_rates_interval_us )) + + ((achieved_rate_kbps[dl]<0)) && achieved_rate_kbps[dl]=0 + ((achieved_rate_kbps[ul]<0)) && achieved_rate_kbps[ul]=0 + + printf "SET_ARRAY_ELEMENT achieved_rate_kbps dl %s\n" "${achieved_rate_kbps[dl]}" >&"${main_fd}" + printf "SET_ARRAY_ELEMENT achieved_rate_kbps ul %s\n" "${achieved_rate_kbps[ul]}" >&"${main_fd}" + + load_percent[dl]=$(( (100*achieved_rate_kbps[dl])/shaper_rate_kbps[dl] )) + load_percent[ul]=$(( (100*achieved_rate_kbps[ul])/shaper_rate_kbps[ul] )) + + for pinger_fd in "${pinger_fds[@]:?}" + do + printf "SET_ARRAY_ELEMENT load_percent dl %s\n" "${load_percent[dl]}" >&"${pinger_fd}" + printf "SET_ARRAY_ELEMENT load_percent ul %s\n" "${load_percent[ul]}" >&"${pinger_fd}" + done + + if ((output_load_stats)) + then + + printf -v load_stats '%s; %s; %s; %s; %s' "${EPOCHREALTIME}" "${achieved_rate_kbps[dl]}" "${achieved_rate_kbps[ul]}" "${shaper_rate_kbps[dl]}" "${shaper_rate_kbps[ul]}" + log_msg "LOAD" "${load_stats}" + fi + + prev_rx_bytes="${rx_bytes}" + prev_tx_bytes="${tx_bytes}" + + compensated_monitor_achieved_rates_interval_us=$(( monitor_achieved_rates_interval_us>(10*max_wire_packet_rtt_us) ? monitor_achieved_rates_interval_us : 10*max_wire_packet_rtt_us )) + + sleep_remaining_tick_time "${t_start_us}" "${compensated_monitor_achieved_rates_interval_us}" + + done +} + + +classify_load() +{ + # classify the load according to high/low/idle and add _delayed if delayed + # thus ending up with high_delayed, low_delayed, etc. + local direction="${1}" + + if (( load_percent["${direction}"] > high_load_thr_percent )) + then + load_condition["${direction}"]="high" + elif (( achieved_rate_kbps["${direction}"] > connection_active_thr_kbps )) + then + load_condition["${direction}"]="low" + else + load_condition["${direction}"]="idle" + fi + + ((bufferbloat_detected["${direction}"])) && load_condition["${direction}"]="${load_condition[${direction}]}_bb" + + if ((sss_compensation)) + then + # shellcheck disable=SC2154 + for sss_time_us in "${sss_times_us[@]}" + do + ((timestamp_usecs_past_minute=${EPOCHREALTIME/./}%60000000)) + if (( (timestamp_usecs_past_minute > (sss_time_us-sss_compensation_pre_duration_us)) && (timestamp_usecs_past_minute < (sss_time_us+sss_compensation_post_duration_us)) )) + then + load_condition["${direction}"]="${load_condition[${direction}]}_sss" + break + fi + done + fi + + load_condition["${direction}"]="${direction}_${load_condition[${direction}]}" +} + +# MAINTAIN PINGERS + ASSOCIATED HELPER FUNCTIONS + +parse_preprocessor() +{ + # prepend REFLECTOR_RESPONSE and append timestamp as a checksum + while read -r timestamp remainder + do + printf "REFLECTOR_RESPONSE %s %s %s\n" "${timestamp}" "${remainder}" "${timestamp}" >&"${pinger_fds[pinger]}" + done +} + +parse_tsping() +{ + trap '' INT + trap 'terminate "${pinger_pid}" "${parse_preprocessor_pid}"' TERM EXIT + + local parse_id="${1}" + local reflectors=("${@:2}") + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + declare -A dl_owd_baselines_us + declare -A ul_owd_baselines_us + declare -A dl_owd_delta_ewmas_us + declare -A ul_owd_delta_ewmas_us + + for (( reflector=0; reflector >(parse_preprocessor) + parse_preprocessor_pid="${!}" + printf "SET_PROC_PID proc_pids %s %s\n" "${parse_id}_preprocessor" "${parse_preprocessor_pid}" >&"${main_fd}" + # accommodate present tsping interval/sleep handling to prevent ping flood with only one pinger + tsping_sleep_time=$(( no_pingers == 1 ? ping_response_interval_ms : 0 )) + ${ping_prefix_string} tsping ${ping_extra_args} --print-timestamps --machine-readable=' ' --sleep-time "${tsping_sleep_time}" --target-spacing "${ping_response_interval_ms}" "${reflectors[@]:0:${no_pingers}}" 2>/dev/null >&"${parse_preprocessor_fd}" & + pinger_pid="${!}" + printf "SET_PROC_PID proc_pids %s %s\n" "${parse_id}_pinger" "${pinger_pid}" >&"${main_fd}" + continue + ;; + + KILL_PINGER) + + terminate "${pinger_pid}" "${parse_preprocessor_pid}" + exec {parse_preprocessor_fd}>&- + continue + ;; + + SET_REFLECTORS) + + read -r -a reflectors <<< "${command[@]:1}" + log_msg "DEBUG" "Read in new reflectors: ${reflectors[*]}" + for (( reflector=0; reflector 50 mins, immediately reset the baselines to the new dl_owd_us and ul_owd_us. + # + # Happilly, the sum of dl_owd_baseline_us and ul_owd_baseline_us will roughly equal rtt_baseline_us. + # And since Transmit is approximately equal to Received, RTT is approximately equal to Finished - Originate. + # And thus the sum of dl_owd_baseline_us and ul_owd_baseline_us should not be affected by the rollover/compensation. + # Hence working with this sum, rather than the individual components, is useful for the reflector health check in maintain_pingers(). + + if (( (${dl_owd_delta_us#-} + ${ul_owd_delta_us#-}) < 3000000000 )) + then + + dl_alpha=$(( dl_owd_us >= dl_owd_baselines_us[${reflector}] ? alpha_baseline_increase : alpha_baseline_decrease )) + ul_alpha=$(( ul_owd_us >= ul_owd_baselines_us[${reflector}] ? alpha_baseline_increase : alpha_baseline_decrease )) + + ewma_iteration "${dl_owd_us}" "${dl_alpha}" "dl_owd_baselines_us[${reflector}]" + ewma_iteration "${ul_owd_us}" "${ul_alpha}" "ul_owd_baselines_us[${reflector}]" + + dl_owd_delta_us=$(( dl_owd_us - dl_owd_baselines_us[${reflector}] )) + ul_owd_delta_us=$(( ul_owd_us - ul_owd_baselines_us[${reflector}] )) + else + dl_owd_baselines_us[${reflector}]=${dl_owd_us} + ul_owd_baselines_us[${reflector}]=${ul_owd_us} + + dl_owd_delta_us=0 + ul_owd_delta_us=0 + fi + + if (( load_percent[dl] < high_load_thr_percent && load_percent[ul] < high_load_thr_percent)) + then + ewma_iteration "${dl_owd_delta_us}" "${alpha_delta_ewma}" "dl_owd_delta_ewmas_us[${reflector}]" + ewma_iteration "${ul_owd_delta_us}" "${alpha_delta_ewma}" "ul_owd_delta_ewmas_us[${reflector}]" + fi + + printf "REFLECTOR_RESPONSE %s %s %s %s %s %s %s %s %s %s %s\n" "${timestamp}" "${reflector}" "${seq}" "${dl_owd_baselines_us[${reflector}]}" "${dl_owd_us}" "${dl_owd_delta_ewmas_us[${reflector}]}" "${dl_owd_delta_us}" "${ul_owd_baselines_us[${reflector}]}" "${ul_owd_us}" "${ul_owd_delta_ewmas_us[${reflector}]}" "${ul_owd_delta_us}" >&"${main_fd}" + + timestamp_us="${timestamp//[.]}" + + printf "SET_ARRAY_ELEMENT dl_owd_baselines_us %s %s\n" "${reflector}" "${dl_owd_baselines_us[${reflector}]}" >&"${maintain_pingers_fd}" + printf "SET_ARRAY_ELEMENT ul_owd_baselines_us %s %s\n" "${reflector}" "${ul_owd_baselines_us[${reflector}]}" >&"${maintain_pingers_fd}" + + printf "SET_ARRAY_ELEMENT dl_owd_delta_ewmas_us %s %s\n" "${reflector}" "${dl_owd_delta_ewmas_us[${reflector}]}" >&"${maintain_pingers_fd}" + printf "SET_ARRAY_ELEMENT ul_owd_delta_ewmas_us %s %s\n" "${reflector}" "${ul_owd_delta_ewmas_us[${reflector}]}" >&"${maintain_pingers_fd}" + + printf "SET_ARRAY_ELEMENT last_timestamp_reflectors_us %s %s\n" "${reflector}" "${timestamp_us}" >&"${maintain_pingers_fd}" + fi + done +} + +parse_fping() +{ + trap '' INT + trap 'terminate "${pinger_pid}" "${parse_preprocessor_pid}"' TERM EXIT + + local parse_id="${1}" + + local reflectors=("${@:2}") + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + declare -A dl_owd_baselines_us + declare -A ul_owd_baselines_us + declare -A dl_owd_delta_ewmas_us + declare -A ul_owd_delta_ewmas_us + + for (( reflector=0; reflector >(parse_preprocessor) + parse_preprocessor_pid="${!}" + printf "SET_PROC_PID proc_pids %s %s\n" "${parse_id}_preprocessor" "${parse_preprocessor_pid}" >&"${main_fd}" + ${ping_prefix_string} fping ${ping_extra_args} --timestamp --loop --period "${reflector_ping_interval_ms}" --interval "${ping_response_interval_ms}" --timeout 10000 "${reflectors[@]:0:${no_pingers}}" 2> /dev/null >&"${parse_preprocessor_fd}" & + pinger_pid="${!}" + printf "SET_PROC_PID proc_pids %s %s\n" "${parse_id}_pinger" "${pinger_pid}" >&"${main_fd}" + continue + ;; + + KILL_PINGER) + + terminate "${pinger_pid}" "${parse_preprocessor_pid}" + exec {parse_preprocessor_fd}>&- + continue + ;; + + SET_REFLECTORS) + + read -r -a reflectors <<< "${command[@]:1}" + log_msg "DEBUG" "Read in new reflectors: ${reflectors[*]}" + for (( reflector=0; reflector= dl_owd_baselines_us[${reflector}] ? alpha_baseline_increase : alpha_baseline_decrease )) + + ewma_iteration "${dl_owd_us}" "${dl_alpha}" "dl_owd_baselines_us[${reflector}]" + ul_owd_baselines_us["${reflector}"]="${dl_owd_baselines_us[${reflector}]}" + + dl_owd_delta_us=$(( dl_owd_us - dl_owd_baselines_us[${reflector}] )) + ul_owd_delta_us="${dl_owd_delta_us}" + + if (( load_percent[dl] < high_load_thr_percent && load_percent[ul] < high_load_thr_percent)) + then + ewma_iteration "${dl_owd_delta_us}" "${alpha_delta_ewma}" "dl_owd_delta_ewmas_us[${reflector}]" + ul_owd_delta_ewmas_us["${reflector}"]="${dl_owd_delta_ewmas_us[${reflector}]}" + fi + + timestamp="${timestamp//[\[\]]}0" + + printf "REFLECTOR_RESPONSE %s %s %s %s %s %s %s %s %s %s %s\n" "${timestamp}" "${reflector}" "${seq}" "${dl_owd_baselines_us[${reflector}]}" "${dl_owd_us}" "${dl_owd_delta_ewmas_us[${reflector}]}" "${dl_owd_delta_us}" "${ul_owd_baselines_us[${reflector}]}" "${ul_owd_us}" "${ul_owd_delta_ewmas_us[${reflector}]}" "${ul_owd_delta_us}" >&"${main_fd}" + + timestamp_us="${timestamp//[.]}" + + printf "SET_ARRAY_ELEMENT dl_owd_baselines_us %s %s\n" "${reflector}" "${dl_owd_baselines_us[${reflector}]}" >&"${maintain_pingers_fd}" + printf "SET_ARRAY_ELEMENT ul_owd_baselines_us %s %s\n" "${reflector}" "${ul_owd_baselines_us[${reflector}]}" >&"${maintain_pingers_fd}" + + printf "SET_ARRAY_ELEMENT dl_owd_delta_ewmas_us %s %s\n" "${reflector}" "${dl_owd_delta_ewmas_us[${reflector}]}" >&"${maintain_pingers_fd}" + printf "SET_ARRAY_ELEMENT ul_owd_delta_ewmas_us %s %s\n" "${reflector}" "${ul_owd_delta_ewmas_us[${reflector}]}" >&"${maintain_pingers_fd}" + + printf "SET_ARRAY_ELEMENT last_timestamp_reflectors_us %s %s\n" "${reflector}" "${timestamp_us}" >&"${maintain_pingers_fd}" + fi + done +} +# IPUTILS-PING FUNCTIONS +parse_ping() +{ + trap '' INT + trap 'terminate "${pinger_pid}" "${parse_preprocessor_pid}"' TERM EXIT + + # ping reflector, maintain baseline and output deltas to a common fifo + + local parse_id="${1}" + local reflector="${2}" + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + declare -A dl_owd_baselines_us + declare -A ul_owd_baselines_us + declare -A dl_owd_delta_ewmas_us + declare -A ul_owd_delta_ewmas_us + + dl_owd_baselines_us["${reflector}"]=100000 + ul_owd_baselines_us["${reflector}"]=100000 + dl_owd_delta_ewmas_us["${reflector}"]=0 + ul_owd_delta_ewmas_us["${reflector}"]=0 + + declare -A load_percent + load_percent[dl]=0 + load_percent[ul]=0 + + while true + do + unset command + read -r -u "${pinger_fds[pinger]}" -a command + if [[ "${command-}" ]] + then + case "${command[0]}" in + + REFLECTOR_RESPONSE) + + read -r timestamp _ _ _ reflector seq_rtt <<< "${command[@]:1}" + checksum="${command[*]: -1}" + ;; + + START_PINGER) + + exec {parse_preprocessor_fd}> >(parse_preprocessor) + parse_preprocessor_pid="${!}" + printf "SET_PROC_PID %s %s\n" "proc_pids ${parse_id}_preprocessor" "${parse_preprocessor_pid}" >&"${main_fd}" + ${ping_prefix_string} ping ${ping_extra_args} -D -i "${reflector_ping_interval_s}" "${reflector}" 2> /dev/null >&"${parse_preprocessor_fd}" & + pinger_pid="${!}" + printf "SET_PROC_PID proc_pids %s %s\n" "${parse_id}_pinger" "${pinger_pid}" >&"${main_fd}" + continue + ;; + + KILL_PINGER) + + terminate "${pinger_pid}" "${parse_preprocessor_pid}" + exec {parse_preprocessor_fd}>&- + continue + ;; + + SET_REFLECTOR) + + if [[ "${#command[@]}" -eq 2 ]] + then + reflector="${command[1]}" + log_msg "DEBUG" "Read in new reflector: ${reflector}" + dl_owd_baselines_us["${reflector}"]="${dl_owd_baselines_us[${reflector}]:-100000}" + ul_owd_baselines_us["${reflector}"]="${ul_owd_baselines_us[${reflector}]:-100000}" + dl_owd_delta_ewmas_us["${reflector}"]="${dl_owd_delta_ewmas_us[${reflector}]:-0}" + ul_owd_delta_ewmas_us["${reflector}"]="${ul_owd_delta_ewmas_us[${reflector}]:-0}" + continue + fi + ;; + + SET_VAR) + + if [[ "${#command[@]}" -eq 3 ]] + then + export -n "${command[1]}=${command[2]}" + fi + continue + ;; + + SET_ARRAY_ELEMENT) + + if [[ "${#command[@]}" -eq 4 ]] + then + declare -A "${command[1]}"+="([${command[2]}]=${command[3]})" + fi + continue + ;; + + TERMINATE) + + log_msg "DEBUG" "Terminating parse_ping." + exit + ;; + + *) + + continue + ;; + + esac + fi + + if [[ "${timestamp:-}" && "${reflector:-}" && "${seq_rtt:-}" && "${checksum:-}" ]] + then + [[ "${checksum}" == "${timestamp}" ]] + # If no match then skip onto the next one + [[ "${seq_rtt}" =~ icmp_[s|r]eq=([0-9]+).*time=([0-9]+)\.?([0-9]+)?[[:space:]]ms ]] || continue + + reflector=${reflector//:/} + + seq=${BASH_REMATCH[1]} + + rtt_us=${BASH_REMATCH[3]}000 + rtt_us=$((${BASH_REMATCH[2]}000+10#${rtt_us:0:3})) + + dl_owd_us=$((rtt_us/2)) + ul_owd_us="${dl_owd_us}" + + dl_alpha=$(( dl_owd_us >= dl_owd_baselines_us[${reflector}] ? alpha_baseline_increase : alpha_baseline_decrease )) + + ewma_iteration "${dl_owd_us}" "${dl_alpha}" "dl_owd_baselines_us[${reflector}]" + ul_owd_baselines_us["${reflector}"]="${dl_owd_baselines_us[${reflector}]}" + + dl_owd_delta_us=$(( dl_owd_us - dl_owd_baselines_us[${reflector}] )) + ul_owd_delta_us="${dl_owd_delta_us}" + + if (( load_percent[dl] < high_load_thr_percent && load_percent[ul] < high_load_thr_percent)) + then + ewma_iteration "${dl_owd_delta_us}" "${alpha_delta_ewma}" "dl_owd_delta_ewmas_us[${reflector}]" + ul_owd_delta_ewmas_us["${reflector}"]="${dl_owd_delta_ewmas_us[${reflector}]}" + fi + + timestamp="${timestamp//[\[\]]}" + + printf "REFLECTOR_RESPONSE %s %s %s %s %s %s %s %s %s %s %s\n" "${timestamp}" "${reflector}" "${seq}" "${dl_owd_baselines_us[${reflector}]}" "${dl_owd_us}" "${dl_owd_delta_ewmas_us[${reflector}]}" "${dl_owd_delta_us}" "${ul_owd_baselines_us[${reflector}]}" "${ul_owd_us}" "${ul_owd_delta_ewmas_us[${reflector}]}" "${ul_owd_delta_us}" >&"${main_fd}" + + timestamp_us="${timestamp//[.]}" + + printf "SET_ARRAY_ELEMENT dl_owd_baselines_us %s %s\n" "${reflector}" "${dl_owd_baselines_us[${reflector}]}" >&"${maintain_pingers_fd}" + printf "SET_ARRAY_ELEMENT ul_owd_baselines_us %s %s\n" "${reflector}" "${ul_owd_baselines_us[${reflector}]}" >&"${maintain_pingers_fd}" + + printf "SET_ARRAY_ELEMENT dl_owd_delta_ewmas_us %s %s\n" "${reflector}" "${dl_owd_delta_ewmas_us[${reflector}]}" >&"${maintain_pingers_fd}" + printf "SET_ARRAY_ELEMENT ul_owd_delta_ewmas_us %s %s\n" "${reflector}" "${ul_owd_delta_ewmas_us[${reflector}]}" >&"${maintain_pingers_fd}" + + printf "SET_ARRAY_ELEMENT last_timestamp_reflectors_us %s %s\n" "${reflector}" "${timestamp_us}" >&"${maintain_pingers_fd}" + fi + done +} + +# END OF IPUTILS-PING FUNCTIONS + +# GENERIC PINGER START AND STOP FUNCTIONS + +start_pinger() +{ + local pinger="${1}" + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + case ${pinger_binary} in + + tsping|fping) + pinger=0 + printf "START_PINGER\n" >&"${pinger_fds[pinger]}" + ;; + ping) + sleep_until_next_pinger_time_slot "${pinger}" + printf "START_PINGER\n" >&"${pinger_fds[pinger]}" + ;; + *) + log_msg "ERROR" "Unknown pinger binary: ${pinger_binary}" + kill $$ 2>/dev/null + ;; + esac +} + +start_pingers() +{ + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + case ${pinger_binary} in + + tsping|fping) + start_pinger 0 + ;; + ping) + for ((pinger=0; pinger < no_pingers; pinger++)) + do + start_pinger "${pinger}" + done + ;; + *) + log_msg "ERROR" "Unknown pinger binary: ${pinger_binary}" + kill $$ 2>/dev/null + ;; + esac +} + +sleep_until_next_pinger_time_slot() +{ + # wait until next pinger time slot and start pinger in its slot + # this allows pingers to be stopped and started (e.g. during sleep or reflector rotation) + # whilst ensuring pings will remain spaced out appropriately to maintain granularity + + local pinger="${1}" + + t_start_us=${EPOCHREALTIME/./} + time_to_next_time_slot_us=$(( (reflector_ping_interval_us-(t_start_us-pingers_t_start_us)%reflector_ping_interval_us) + pinger*ping_response_interval_us )) + sleep_remaining_tick_time "${t_start_us}" "${time_to_next_time_slot_us}" +} + +kill_pinger() +{ + local pinger="${1}" + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + case "${pinger_binary}" in + tsping|fping) + pinger=0 + ;; + + *) + ;; + esac + + printf "KILL_PINGER\n" >&"${pinger_fds[pinger]}" +} + +kill_pingers() +{ + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + case "${pinger_binary}" in + + tsping|fping) + log_msg "DEBUG" "Killing ${pinger_binary} instance." + kill_pinger 0 + ;; + ping) + for (( pinger=0; pinger < no_pingers; pinger++)) + do + log_msg "DEBUG" "Killing pinger instance: ${pinger}" + kill_pinger "${pinger}" + done + ;; + *) + log_msg "ERROR" "Unknown pinger binary: ${pinger_binary}" + kill $$ 2>/dev/null + ;; + esac +} + +replace_pinger_reflector() +{ + # pingers always use reflectors[0]..[no_pingers-1] as the initial set + # and the additional reflectors are spare reflectors should any from initial set go stale + # a bad reflector in the initial set is replaced with ${reflectors[no_pingers]} + # ${reflectors[no_pingers]} is then unset + # and the the bad reflector moved to the back of the queue (last element in ${reflectors[]}) + # and finally the indices for ${reflectors} are updated to reflect the new order + + local pinger="${1}" + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + if ((no_reflectors > no_pingers)) + then + log_msg "DEBUG" "replacing reflector: ${reflectors[pinger]} with ${reflectors[no_pingers]}." + kill_pinger "${pinger}" + bad_reflector=${reflectors[pinger]} + # overwrite the bad reflector with the reflector that is next in the queue (the one after 0..${no_pingers}-1) + reflectors[pinger]=${reflectors[no_pingers]} + # remove the new reflector from the list of additional reflectors beginning from ${reflectors[no_pingers]} + unset "reflectors[no_pingers]" + # bad reflector goes to the back of the queue + reflectors+=("${bad_reflector}") + # reset array indices + mapfile -t reflectors < <(for i in "${reflectors[@]}"; do printf '%s\n' "${i}"; done) + # set up the new pinger with the new reflector and retain pid + case ${pinger_binary} in + + tsping|fping) + printf "SET_REFLECTORS %s\n" "${reflectors[*]:0:${no_pingers}}" >&"${pinger_fds[0]}" + ;; + ping) + printf "SET_REFLECTOR %s\n" "${reflectors[pinger]}" >&"${pinger_fds[pinger]}" + ;; + *) + log_msg "ERROR" "Unknown pinger binary: ${pinger_binary}" + kill $$ 2>/dev/null + ;; + esac + start_pinger "${pinger}" + else + log_msg "DEBUG" "No additional reflectors specified so just retaining: ${reflectors[pinger]}." + fi + + log_msg "DEBUG" "Resetting reflector offences associated with reflector: ${reflectors[pinger]}." + declare -n reflector_offences="reflector_${pinger}_offences" + for ((i=0; i&"${pinger_fds[0]}" + ;; + ping) + for((pinger=0; pinger < no_pingers; pinger++)) + do + printf "TERMINATE\n" >&"${pinger_fds[pinger]}" + done + ;; + *) + log_msg "ERROR" "Unknown pinger binary: ${pinger_binary}" + kill $$ 2>/dev/null + ;; + esac + + exit +} + +change_state_maintain_pingers() +{ + local maintain_pingers_next_state="${1:-unset}" + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + case "${maintain_pingers_next_state}" in + + START|STOP|PAUSED|RUNNING) + + if [[ "${maintain_pingers_state}" == "${maintain_pingers_next_state}" ]] + then + log_msg "ERROR" "Received request to change maintain_pingers state to existing state." + return + fi + + log_msg "DEBUG" "Changing maintain_pingers state from: ${maintain_pingers_state} to: ${maintain_pingers_next_state}" + maintain_pingers_state=${maintain_pingers_next_state} + ;; + + *) + + log_msg "ERROR" "Received unrecognized state change request: ${maintain_pingers_next_state}. Exiting now." + kill $$ 2>/dev/null + ;; + esac +} + +maintain_pingers() +{ + # this initiates the pingers and monitors reflector health, rotating reflectors as necessary + + trap '' INT + trap 'kill_maintain_pingers' TERM EXIT + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + declare -A dl_owd_baselines_us + declare -A ul_owd_baselines_us + declare -A dl_owd_delta_ewmas_us + declare -A ul_owd_delta_ewmas_us + declare -A last_timestamp_reflectors_us + + err_silence=0 + reflector_offences_idx=0 + pingers_active=0 + + pingers_t_start_us="${EPOCHREALTIME/./}" + t_last_reflector_replacement_us="${EPOCHREALTIME/./}" + t_last_reflector_comparison_us="${EPOCHREALTIME/./}" + + for ((reflector=0; reflector < no_reflectors; reflector++)) + do + last_timestamp_reflectors_us["${reflectors[reflector]}"]="${pingers_t_start_us}" + done + + # For each pinger initialize record of offences + for ((pinger=0; pinger < no_pingers; pinger++)) + do + # shellcheck disable=SC2178 + declare -n reflector_offences="reflector_${pinger}_offences" + for ((i=0; i&"${main_fd}" + ;; + fping) + parse_fping "parse_fping" "${reflectors[@]:0:${no_pingers}}" & + printf "SET_PROC_PID proc_pids parse_fping %s\n" "${!}" >&"${main_fd}" + ;; + ping) + for((pinger=0; pinger < no_pingers; pinger++)) + do + parse_ping "parse_ping_${pinger}" "${reflectors[pinger]}" & + printf "SET_PROC_PID proc_pids %s %s\n" "parse_ping_${pinger}" "${!}" >&"${main_fd}" + done + ;; + *) + log_msg "ERROR" "Unknown pinger binary: ${pinger_binary}" + kill $$ 2>/dev/null + ;; + esac + + + # Reflector maintenance loop - verifies reflectors have not gone stale and rotates reflectors as necessary + while true + do + t_start_us="${EPOCHREALTIME/./}" + + while read -r -t 0 -u "${maintain_pingers_fd}" + do + unset command + read -r -u "${maintain_pingers_fd}" -a command + case "${command[0]:-}" in + + CHANGE_STATE) + if [[ "${#command[@]}" -eq 2 ]] + then + change_state_maintain_pingers "${command[1]}" + # break out of reading any new IPC commands to handle next state + # if pingers need to be started or stopped + case "${command[1]}" in + START|STOP) + break + ;; + *) + : + ;; + esac + fi + ;; + SET_ARRAY_ELEMENT) + if [[ "${#command[@]}" -eq 4 ]] + then + declare -A "${command[1]}"+="([${command[2]}]=${command[3]})" + fi + ;; + SET_VAR) + if [[ "${#command[@]}" -eq 3 ]] + then + export -n "${command[1]}=${command[2]}" + fi + ;; + TERMINATE) + log_msg "DEBUG" "Terminating monitor_achieved_rates." + exit + ;; + *) + : + ;; + esac + done + + case "${maintain_pingers_state}" in + + START) + if ((pingers_active==0)) + then + start_pingers + pingers_active=1 + fi + change_state_maintain_pingers "RUNNING" + ;; + + STOP) + if ((pingers_active)) + then + kill_pingers + pingers_active=0 + fi + change_state_maintain_pingers "PAUSED" + ;; + + PAUSED) + ;; + + RUNNING) + + if (( t_start_us>(t_last_reflector_replacement_us+reflector_replacement_interval_mins*60*1000000) )) + then + pinger=$((RANDOM%no_pingers)) + log_msg "DEBUG" "reflector: ${reflectors[pinger]} randomly selected for replacement." + replace_pinger_reflector "${pinger}" + t_last_reflector_replacement_us=${EPOCHREALTIME/./} + continue + fi + + if (( t_start_us>(t_last_reflector_comparison_us+reflector_comparison_interval_mins*60*1000000) )) + then + + t_last_reflector_comparison_us=${EPOCHREALTIME/./} + + [[ "${dl_owd_baselines_us[${reflectors[0]}]:-}" && "${dl_owd_baselines_us[${reflectors[0]}]:-}" && "${ul_owd_baselines_us[${reflectors[0]}]:-}" && "${ul_owd_baselines_us[${reflectors[0]}]:-}" ]] || continue + + min_sum_owd_baselines_us=$(( dl_owd_baselines_us[${reflectors[0]}] + ul_owd_baselines_us[${reflectors[0]}] )) + min_dl_owd_delta_ewma_us="${dl_owd_delta_ewmas_us[${reflectors[0]}]}" + min_ul_owd_delta_ewma_us="${ul_owd_delta_ewmas_us[${reflectors[0]}]}" + + for ((pinger=0; pinger < no_pingers; pinger++)) + do + [[ "${dl_owd_baselines_us[${reflectors[pinger]}]:-}" && "${dl_owd_delta_ewmas_us[${reflectors[pinger]}]:-}" && "${ul_owd_baselines_us[${reflectors[pinger]}]:-}" && "${ul_owd_delta_ewmas_us[${reflectors[pinger]}]:-}" ]] || continue 2 + + sum_owd_baselines_us[pinger]=$(( dl_owd_baselines_us[${reflectors[pinger]}] + ul_owd_baselines_us[${reflectors[pinger]}] )) + (( sum_owd_baselines_us[pinger] < min_sum_owd_baselines_us )) && min_sum_owd_baselines_us="${sum_owd_baselines_us[pinger]}" + (( dl_owd_delta_ewmas_us[${reflectors[pinger]}] < min_dl_owd_delta_ewma_us )) && min_dl_owd_delta_ewma_us="${dl_owd_delta_ewmas_us[${reflectors[pinger]}]}" + (( ul_owd_delta_ewmas_us[${reflectors[pinger]}] < min_ul_owd_delta_ewma_us )) && min_ul_owd_delta_ewma_us="${ul_owd_delta_ewmas_us[${reflectors[pinger]}]}" + done + + for ((pinger=0; pinger < no_pingers; pinger++)) + do + + sum_owd_baselines_delta_us=$(( sum_owd_baselines_us[pinger] - min_sum_owd_baselines_us )) + dl_owd_delta_ewma_delta_us=$(( dl_owd_delta_ewmas_us[${reflectors[pinger]}] - min_dl_owd_delta_ewma_us )) + ul_owd_delta_ewma_delta_us=$(( ul_owd_delta_ewmas_us[${reflectors[pinger]}] - min_ul_owd_delta_ewma_us )) + + if ((output_reflector_stats)) + then + printf -v reflector_stats '%s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s' "${EPOCHREALTIME}" "${reflectors[pinger]}" "${min_sum_owd_baselines_us}" "${sum_owd_baselines_us[pinger]}" "${sum_owd_baselines_delta_us}" "${reflector_sum_owd_baselines_delta_thr_us}" "${min_dl_owd_delta_ewma_us}" "${dl_owd_delta_ewmas_us[${reflectors[pinger]}]}" "${dl_owd_delta_ewma_delta_us}" "${reflector_owd_delta_ewma_delta_thr_us}" "${min_ul_owd_delta_ewma_us}" "${ul_owd_delta_ewmas_us[${reflectors[pinger]}]}" "${ul_owd_delta_ewma_delta_us}" "${reflector_owd_delta_ewma_delta_thr_us}" + log_msg "REFLECTOR" "${reflector_stats}" + fi + + if (( sum_owd_baselines_delta_us > reflector_sum_owd_baselines_delta_thr_us )) + then + log_msg "DEBUG" "Warning: reflector: ${reflectors[pinger]} sum_owd_baselines_us exceeds the minimum by set threshold." + replace_pinger_reflector "${pinger}" + continue 2 + fi + + if (( dl_owd_delta_ewma_delta_us > reflector_owd_delta_ewma_delta_thr_us )) + then + log_msg "DEBUG" "Warning: reflector: ${reflectors[pinger]} dl_owd_delta_ewma_us exceeds the minimum by set threshold." + replace_pinger_reflector "${pinger}" + continue 2 + fi + + if (( ul_owd_delta_ewma_delta_us > reflector_owd_delta_ewma_delta_thr_us )) + then + log_msg "DEBUG" "Warning: reflector: ${reflectors[pinger]} ul_owd_delta_ewma_us exceeds the minimum by set threshold." + replace_pinger_reflector "${pinger}" + continue 2 + fi + done + + fi + + replace_pinger_reflector_enabled=1 + + for ((pinger=0; pinger < no_pingers; pinger++)) + do + # shellcheck disable=SC2178 + declare -n reflector_offences="reflector_${pinger}_offences" + + (( reflector_offences[reflector_offences_idx] )) && ((sum_reflector_offences[pinger]--)) + # shellcheck disable=SC2154 + reflector_offences[reflector_offences_idx]=$(( (${EPOCHREALTIME/./}-last_timestamp_reflectors_us[${reflectors[pinger]}]) > reflector_response_deadline_us ? 1 : 0 )) + + if (( reflector_offences[reflector_offences_idx] )) + then + ((sum_reflector_offences[pinger]++)) + log_msg "DEBUG" "no ping response from reflector: ${reflectors[pinger]} within reflector_response_deadline: ${reflector_response_deadline_s}s" + log_msg "DEBUG" "reflector=${reflectors[pinger]}, sum_reflector_offences=${sum_reflector_offences[pinger]} and reflector_misbehaving_detection_thr=${reflector_misbehaving_detection_thr}" + fi + + if (( sum_reflector_offences[pinger] >= reflector_misbehaving_detection_thr )) + then + + log_msg "DEBUG" "Warning: reflector: ${reflectors[pinger]} seems to be misbehaving." + if ((replace_pinger_reflector_enabled)) + then + replace_pinger_reflector "${pinger}" + replace_pinger_reflector_enabled=0 + else + log_msg "DEBUG" "Warning: skipping replacement of reflector: ${reflectors[pinger]} given prior replacement within this reflector health check cycle." + fi + fi + done + ((reflector_offences_idx=(reflector_offences_idx+1)%reflector_misbehaving_detection_window)) + ;; + *) + log_msg "ERROR" "Unrecognized maintain pingers state: ${maintain_pingers_state}." + log_msg "ERROR" "Setting state to RUNNING" + maintain_pingers_next_state="RUNNING" + change_maintain_pingers_state + ;; + esac + + sleep_remaining_tick_time "${t_start_us}" "${reflector_health_check_interval_us}" + done +} + +set_shaper_rate() +{ + # fire up tc and update max_wire_packet_compensation if there are rates to change for the given direction + + local direction="${1}" # 'dl' or 'ul' + + if (( shaper_rate_kbps["${direction}"] != last_shaper_rate_kbps["${direction}"] )) + then + ((output_cake_changes)) && log_msg "SHAPER" "tc qdisc change root dev ${interface[${direction}]} cake bandwidth ${shaper_rate_kbps[${direction}]}Kbit" + + if ((adjust_shaper_rate["${direction}"])) + then + tc qdisc change root dev "${interface[${direction}]}" cake bandwidth "${shaper_rate_kbps[${direction}]}Kbit" 2> /dev/null + else + ((output_cake_changes)) && log_msg "DEBUG" "adjust_${direction}_shaper_rate set to 0 in config, so skipping the corresponding tc qdisc change call." + fi + + printf "SET_ARRAY_ELEMENT shaper_rate_kbps ${direction} %s\n" "${shaper_rate_kbps[${direction}]}" >&"${monitor_achieved_rates_fd}" + last_shaper_rate_kbps["${direction}"]="${shaper_rate_kbps[${direction}]}" + + update_max_wire_packet_compensation + fi +} + +set_min_shaper_rates() +{ + log_msg "DEBUG" "Enforcing minimum shaper rates." + shaper_rate_kbps[dl]=${min_dl_shaper_rate_kbps} + shaper_rate_kbps[ul]=${min_ul_shaper_rate_kbps} + set_shaper_rate "dl" + set_shaper_rate "ul" +} + +get_max_wire_packet_size_bits() +{ + local interface="${1}" + local -n max_wire_packet_size_bits="${2}" + + read -r max_wire_packet_size_bits < "/sys/class/net/${interface}/mtu" + [[ $(tc qdisc show dev "${interface}") =~ (atm|noatm)[[:space:]]overhead[[:space:]]([0-9]+) ]] + max_wire_packet_size_bits=$(( 8*(max_wire_packet_size_bits+BASH_REMATCH[2]) )) + # atm compensation = 53*ceil(X/48) bytes = 8*53*((X+8*(48-1)/(8*48)) bits = 424*((X+376)/384) bits + [[ "${BASH_REMATCH[1]:-}" == "atm" ]] && max_wire_packet_size_bits=$(( 424*((max_wire_packet_size_bits+376)/384) )) +} + +update_max_wire_packet_compensation() +{ + # Compensate for delays imposed by active traffic shaper + # This will serve to increase the delay thr at rates below around 12Mbit/s + + # compensated OWD delay thresholds in microseconds + compensated_dl_delay_thr_us=$(( dl_delay_thr_us + (1000*dl_max_wire_packet_size_bits)/shaper_rate_kbps[dl] )) + compensated_ul_delay_thr_us=$(( ul_delay_thr_us + (1000*ul_max_wire_packet_size_bits)/shaper_rate_kbps[ul] )) + + printf "SET_VAR compensated_dl_delay_thr_us %s\n" "${compensated_dl_delay_thr_us}" >&"${maintain_pingers_fd}" + printf "SET_VAR compensated_dl_delay_thr_us %s\n" "${compensated_dl_delay_thr_us}" >&"${maintain_pingers_fd}" + + max_wire_packet_rtt_us=$(( (1000*dl_max_wire_packet_size_bits)/shaper_rate_kbps[dl] + (1000*ul_max_wire_packet_size_bits)/shaper_rate_kbps[ul] )) + + printf "SET_VAR max_wire_packet_rtt_us %s\n" "${max_wire_packet_rtt_us}" >&"${maintain_pingers_fd}" +} + +verify_ifs_up() +{ + # Check the rx/tx paths exist and give extra time for ifb's to come up if needed + # This will block if ifs never come up + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + while [[ ! -f ${rx_bytes_path} || ! -f ${tx_bytes_path} ]] + do + [[ ! -f ${rx_bytes_path} ]] && log_msg "DEBUG" "Warning: The configured download interface: '${dl_if}' does not appear to be present. Waiting ${if_up_check_interval_s} seconds for the interface to come up." + [[ ! -f ${tx_bytes_path} ]] && log_msg "DEBUG" "Warning: The configured upload interface: '${ul_if}' does not appear to be present. Waiting ${if_up_check_interval_s} seconds for the interface to come up." + sleep_s "${if_up_check_interval_s}" + done +} + +ewma_iteration() +{ + local value="${1}" + local alpha="${2}" # alpha must be scaled by factor of 1000000 + local -n ewma="${3}" + + prev_ewma=${ewma} + ewma=$(( (alpha*value+(1000000-alpha)*prev_ewma)/1000000 )) +} + +change_state_main() +{ + local main_next_state="${1}" + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + case ${main_next_state} in + + RUNNING|IDLE|STALL) + + if [[ "${main_state}" != "${main_next_state}" ]] + then + log_msg "DEBUG" "Changing main state from: ${main_state} to: ${main_next_state}" + main_state=${main_next_state} + else + log_msg "ERROR" "Received request to change main state to existing state." + fi + ;; + + *) + + log_msg "ERROR" "Received unrecognized main state change request: ${main_next_state}. Exiting now." + kill $$ 2>/dev/null + ;; + esac +} + +intercept_stderr() +{ + # send stderr to log_msg and exit cake-autorate + # use with redirection: exec 2> >(intercept_stderr) + + while read -r error + do + log_msg "ERROR" "${error}" + kill $$ 2>/dev/null + done +} + +# Debug command wrapper +# Inspired by cmd_wrapper of sqm-script +debug_cmd() +{ + # Usage: debug_cmd debug_msg err_silence cmd arg1 arg2, etc. + + # Error messages are output as log_msg ERROR messages + # Or set error_silence=1 to output errors as log_msg DEBUG messages + + local debug_msg="${1}" + local err_silence="${2}" + local cmd="${3}" + + log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}" + + shift 3 + + local args=("${@}") + + local caller_id + local err_type + + local ret + local stderr + + err_type="ERROR" + + if ((err_silence)) + then + err_type="DEBUG" + fi + + stderr=$(${cmd} "${args[@]}" 2>&1) + ret=${?} + + caller_id=$(caller) + + if ((ret==0)) + then + log_msg "DEBUG" "debug_cmd: err_silence=${err_silence}; debug_msg=${debug_msg}; caller_id=${caller_id}; command=${cmd} ${args[*]}; result=SUCCESS" + else + [[ "${err_type}" == "DEBUG" && "${debug}" == "0" ]] && return # if debug disabled, then skip on DEBUG but not on ERROR + + log_msg "${err_type}" "debug_cmd: err_silence=${err_silence}; debug_msg=${debug_msg}; caller_id=${caller_id}; command=${cmd} ${args[*]}; result=FAILURE (${ret})" + log_msg "${err_type}" "debug_cmd: LAST ERROR (${stderr})" + + frame=1 + while caller_output=$(caller "${frame}") + do + log_msg "${err_type}" "debug_cmd: CALL CHAIN: ${caller_output}" + ((++frame)) + done + fi +} + +# shellcheck disable=SC1090,SC2311 +validate_config_entry() { + # Must be called before loading config_path into the global scope. + # + # When the entry is invalid, two types are returned with the first type + # being the invalid user type and second type is the default type with + # the user needing to adapt the config file so that the entry uses the + # default type. + # + # When the entry is valid, one type is returned and it will be the + # the type of either the default or user type. However because in that + # case they are both valid. It doesn't matter as they'd both have the + # same type. + + local config_path="${1}" + + local user_type + local valid_type + + user_type=$(unset "${2}" && . "${config_path}" && typeof "${2}") + valid_type=$(typeof "${2}") + + if [[ "${user_type}" != "${valid_type}" ]] + then + printf '%s' "${user_type} ${valid_type}" + return + elif [[ "${user_type}" != "string" ]] + then + printf '%s' "${valid_type}" + return + fi + + # extra validation for string, check for empty string + local -n default_value=${2} + local user_value + user_value=$(. "${config_path}" && local -n x="${2}" && printf '%s' "${x}") + + # if user is empty but default is not, invalid entry + if [[ -z "${user_value}" && -n "${default_value}" ]] + then + printf '%s' "${user_type} ${valid_type}" + else + printf '%s' "${valid_type}" + fi +} + +# ======= Start of the Main Routine ======== + +[[ -t 1 ]] && terminal=1 || terminal=0 + +type logger &> /dev/null && use_logger=1 || use_logger=0 # only perform the test once. + +log_file_path=/var/log/cake-autorate.log + +# *** WARNING: take great care if attempting to alter the run_path! *** +# *** cake-autorate issues mkdir -p ${run_path} and rm -r ${run_path} on exit. *** +run_path=/var/run/cake-autorate/ + +# cake-autorate first argument is config file path +if [[ -n "${1-}" ]] +then + config_path="${1}" +else + config_path="${PREFIX}/config.primary.sh" +fi + +if [[ ! -f "${config_path}" ]] +then + log_msg "ERROR" "No config file found. Exiting now." + exit 1 +fi + +# validate config entries before loading +mapfile -t user_config < <(grep -E '^[^(#| )].*=' "${config_path}" | sed -e 's/[\t ]*\#.*//g' -e 's/=.*//g') +config_error_count=0 +for key in "${user_config[@]}" +do + # Despite the fact that config_file_check is no longer required, + # we make an exemption just in this case as that variable in + # particular does not have any real impact to the operation + # of the script. + [[ "${key}" == "config_file_check" ]] && continue + + # shellcheck disable=SC2076 + if [[ ! " ${valid_config_entries[*]} " =~ " ${key} " ]] + then + ((config_error_count++)) + log_msg "ERROR" "The key: '${key}' in config file: '${config_path}' is not a valid config entry." + else + # shellcheck disable=SC2311 + read -r user supposed <<< "$(validate_config_entry "${config_path}" "${key}")" + if [[ -n "${supposed}" ]] + then + error_msg="The value of '${key}' in config file: '${config_path}' is not a valid value of type: '${supposed}'." + + case "${user}" in + negative-*) error_msg="${error_msg} Also, negative numbers are not supported." ;; + *) ;; + esac + + log_msg "ERROR" "${error_msg}" + unset error_msg + + ((config_error_count++)) + fi + unset user supposed + fi +done +if ((config_error_count)) +then + log_msg "ERROR" "The config file: '${config_path}' contains ${config_error_count} error(s). Exiting now." + exit 1 +fi +unset valid_config_entries user_config config_error_count key + +# shellcheck source=config.primary.sh +. "${config_path}" + +if [[ ${config_path} =~ config\.(.*)\.sh ]] +then + instance_id="${BASH_REMATCH[1]}" + run_path="/var/run/cake-autorate/${instance_id}" +else + log_msg "ERROR" "Instance identifier 'X' set by config.X.sh cannot be empty. Exiting now." + exit 1 +fi + +if [[ -n "${log_file_path_override-}" ]] +then + if [[ ! -d ${log_file_path_override} ]] + then + broken_log_file_path_override=${log_file_path_override} + log_file_path=/var/log/cake-autorate${instance_id:+.${instance_id}}.log + log_msg "ERROR" "Log file path override: '${broken_log_file_path_override}' does not exist. Exiting now." + exit + fi + log_file_path=${log_file_path_override}/cake-autorate${instance_id:+.${instance_id}}.log +else + log_file_path=/var/log/cake-autorate${instance_id:+.${instance_id}}.log +fi + +rotate_log_file # rotate here to force header prints at top of log file + +# save stderr fd, redirect stderr to intercept_stderr +# intercept_stderr sends stderr to log_msg and exits cake-autorate +exec {original_stderr_fd}>&2 2> >(intercept_stderr) + +proc_pids['intercept_stderr']=${!} + +log_msg "SYSLOG" "Starting cake-autorate with PID: ${BASHPID} and config: ${config_path}" + +# ${run_path}/ is used to store temporary files +# it should not exist on startup so if it does exit, else create the directory +if [[ -d "${run_path}" ]] +then + if [[ -f "${run_path}/proc_pids" ]] && running_main_pid=$(awk -F= '/^main=/ {print $2}' "${run_path}/proc_pids") && [[ -d "/proc/${running_main_pid}" ]] + then + log_msg "ERROR" "${run_path} already exists and an instance appears to be running with main process pid ${running_main_pid}. Exiting script." + trap - INT TERM EXIT + exit + else + log_msg "DEBUG" "${run_path} already exists but no instance is running. Removing and recreating." + rm -r "${run_path}" + mkdir -p "${run_path}" + fi +else + mkdir -p "${run_path}" +fi + +proc_pids['main']="${BASHPID}" + +no_reflectors=${#reflectors[@]} + +# Check ping binary exists +command -v "${pinger_binary}" &> /dev/null || { log_msg "ERROR" "ping binary ${pinger_binary} does not exist. Exiting script."; exit; } + +# Check no_pingers <= no_reflectors +(( no_pingers > no_reflectors )) && { log_msg "ERROR" "number of pingers cannot be greater than number of reflectors. Exiting script."; exit; } + +# Check dl/if interface not the same +[[ "${dl_if}" == "${ul_if}" ]] && { log_msg "ERROR" "download interface and upload interface are both set to: '${dl_if}', but cannot be the same. Exiting script."; exit; } + +# Check bufferbloat detection threshold not greater than window length +(( bufferbloat_detection_thr > bufferbloat_detection_window )) && { log_msg "ERROR" "bufferbloat_detection_thr cannot be greater than bufferbloat_detection_window. Exiting script."; exit; } + +# Passed error checks + +if ((log_to_file)) +then + log_file_max_time_us=$((log_file_max_time_mins*60000000)) + log_file_max_size_bytes=$((log_file_max_size_KB*1024)) + exec {log_fd}<> <(:) + maintain_log_file & + proc_pids['maintain_log_file']=${!} +fi + +# test if stdout is a tty (terminal) +if ! ((terminal)) +then + echo "stdout not a terminal so redirecting output to: ${log_file_path}" + ((log_to_file)) && exec 1>&"${log_fd}" +fi + +# Initialize rx_bytes_path and tx_bytes_path if not set +if [[ -z "${rx_bytes_path-}" ]] +then + case "${dl_if}" in + veth*) + rx_bytes_path="/sys/class/net/${dl_if}/statistics/tx_bytes" + ;; + ifb*) + rx_bytes_path="/sys/class/net/${dl_if}/statistics/tx_bytes" + ;; + *) + rx_bytes_path="/sys/class/net/${dl_if}/statistics/tx_bytes" + ;; + esac +fi +if [[ -z "${tx_bytes_path-}" ]] +then + case "${ul_if}" in + veth*) + tx_bytes_path="/sys/class/net/${ul_if}/statistics/rx_bytes" + ;; + ifb*) + tx_bytes_path="/sys/class/net/${ul_if}/statistics/rx_bytes" + ;; + *) + tx_bytes_path="/sys/class/net/${ul_if}/statistics/tx_bytes" + ;; + esac +fi + +if ((debug)) +then + log_msg "DEBUG" "CAKE-autorate version: ${cake_autorate_version}" + log_msg "DEBUG" "config_path: ${config_path}" + log_msg "DEBUG" "run_path: ${run_path}" + log_msg "DEBUG" "log_file_path: ${log_file_path}" + log_msg "DEBUG" "pinger_binary:${pinger_binary}" + log_msg "DEBUG" "download interface: ${dl_if} (${min_dl_shaper_rate_kbps} / ${base_dl_shaper_rate_kbps} / ${max_dl_shaper_rate_kbps})" + log_msg "DEBUG" "upload interface: ${ul_if} (${min_ul_shaper_rate_kbps} / ${base_ul_shaper_rate_kbps} / ${max_ul_shaper_rate_kbps})" + log_msg "DEBUG" "rx_bytes_path: ${rx_bytes_path}" + log_msg "DEBUG" "tx_bytes_path: ${tx_bytes_path}" +fi + +# Check interfaces are up and wait if necessary for them to come up +verify_ifs_up + +# Initialize variables + +# Convert human readable parameters to values that work with integer arithmetic + +printf -v dl_delay_thr_us %.0f "${dl_delay_thr_ms}e3" +printf -v ul_delay_thr_us %.0f "${ul_delay_thr_ms}e3" +printf -v alpha_baseline_increase %.0f "${alpha_baseline_increase}e6" +printf -v alpha_baseline_decrease %.0f "${alpha_baseline_decrease}e6" +printf -v alpha_delta_ewma %.0f "${alpha_delta_ewma}e6" +printf -v achieved_rate_adjust_down_bufferbloat %.0f "${achieved_rate_adjust_down_bufferbloat}e3" +printf -v shaper_rate_adjust_down_bufferbloat %.0f "${shaper_rate_adjust_down_bufferbloat}e3" +printf -v shaper_rate_adjust_up_load_high %.0f "${shaper_rate_adjust_up_load_high}e3" +printf -v shaper_rate_adjust_down_load_low %.0f "${shaper_rate_adjust_down_load_low}e3" +printf -v shaper_rate_adjust_up_load_low %.0f "${shaper_rate_adjust_up_load_low}e3" +printf -v high_load_thr_percent %.0f "${high_load_thr}e2" +printf -v reflector_ping_interval_ms %.0f "${reflector_ping_interval_s}e3" +printf -v reflector_ping_interval_us %.0f "${reflector_ping_interval_s}e6" +printf -v reflector_health_check_interval_us %.0f "${reflector_health_check_interval_s}e6" +printf -v monitor_achieved_rates_interval_us %.0f "${monitor_achieved_rates_interval_ms}e3" +printf -v sustained_idle_sleep_thr_us %.0f "${sustained_idle_sleep_thr_s}e6" +printf -v reflector_response_deadline_us %.0f "${reflector_response_deadline_s}e6" +printf -v reflector_sum_owd_baselines_delta_thr_us %.0f "${reflector_sum_owd_baselines_delta_thr_ms}e3" +printf -v reflector_owd_delta_ewma_delta_thr_us %.0f "${reflector_owd_delta_ewma_delta_thr_ms}e3" +printf -v startup_wait_us %.0f "${startup_wait_s}e6" +printf -v global_ping_response_timeout_us %.0f "${global_ping_response_timeout_s}e6" +printf -v bufferbloat_refractory_period_us %.0f "${bufferbloat_refractory_period_ms}e3" +printf -v decay_refractory_period_us %.0f "${decay_refractory_period_ms}e3" + +for (( i=0; i<${#sss_times_s[@]}; i++ )); +do + printf -v sss_times_us[i] %.0f\\n "${sss_times_s[i]}e6" +done +printf -v sss_compensation_pre_duration_us %.0f "${sss_compensation_pre_duration_ms}e3" +printf -v sss_compensation_post_duration_us %.0f "${sss_compensation_post_duration_ms}e3" + +ping_response_interval_us=$(( reflector_ping_interval_us/no_pingers )) +ping_response_interval_ms=$(( ping_response_interval_us/1000 )) + +stall_detection_timeout_us=$(( stall_detection_thr*ping_response_interval_us )) +stall_detection_timeout_s=000000${stall_detection_timeout_us} +stall_detection_timeout_s=$(( 10#${stall_detection_timeout_s::-6})).${stall_detection_timeout_s: -6} + +declare -A bufferbloat_detected +declare -A load_percent +declare -A load_condition +declare -A t_last_bufferbloat_us +declare -A t_last_decay_us +declare -A shaper_rate_kbps +declare -A last_shaper_rate_kbps +declare -A base_shaper_rate_kbps +declare -A min_shaper_rate_kbps +declare -A max_shaper_rate_kbps +declare -A interface +declare -A adjust_shaper_rate + +base_shaper_rate_kbps[dl]="${base_dl_shaper_rate_kbps}" +base_shaper_rate_kbps[ul]="${base_ul_shaper_rate_kbps}" + +min_shaper_rate_kbps[dl]="${min_dl_shaper_rate_kbps}" +min_shaper_rate_kbps[ul]="${min_ul_shaper_rate_kbps}" + +max_shaper_rate_kbps[dl]="${max_dl_shaper_rate_kbps}" +max_shaper_rate_kbps[ul]="${max_ul_shaper_rate_kbps}" + +shaper_rate_kbps[dl]="${base_dl_shaper_rate_kbps}" +shaper_rate_kbps[ul]="${base_ul_shaper_rate_kbps}" + +last_shaper_rate_kbps[dl]=0 +last_shaper_rate_kbps[ul]=0 + +interface[dl]="${dl_if}" +interface[ul]="${ul_if}" + +adjust_shaper_rate[dl]="${adjust_dl_shaper_rate}" +adjust_shaper_rate[ul]="${adjust_ul_shaper_rate}" + +dl_max_wire_packet_size_bits=0 +ul_max_wire_packet_size_bits=0 +get_max_wire_packet_size_bits "${dl_if}" dl_max_wire_packet_size_bits +get_max_wire_packet_size_bits "${ul_if}" ul_max_wire_packet_size_bits + +set_shaper_rate "dl" +set_shaper_rate "ul" + +update_max_wire_packet_compensation + +main_state="RUNNING" + +t_start_us="${EPOCHREALTIME/./}" +t_end_us="${EPOCHREALTIME/./}" + +t_last_bufferbloat_us[dl]="${t_start_us}" +t_last_bufferbloat_us[ul]="${t_start_us}" +t_last_decay_us[dl]="${t_start_us}" +t_last_decay_us[ul]="${t_start_us}" + +t_sustained_connection_idle_us=0 +reflectors_last_timestamp_us="${EPOCHREALTIME/./}" + +mapfile -t dl_delays < <(for ((i=1; i <= bufferbloat_detection_window; i++)); do echo 0; done) +mapfile -t ul_delays < <(for ((i=1; i <= bufferbloat_detection_window; i++)); do echo 0; done) + +delays_idx=0 +sum_dl_delays=0 +sum_ul_delays=0 + +if ((debug)) +then + if (( bufferbloat_refractory_period_us < (bufferbloat_detection_window*ping_response_interval_us) )) + then + log_msg "DEBUG" "Warning: bufferbloat refractory period: ${bufferbloat_refractory_period_us} us." + log_msg "DEBUG" "Warning: but expected time to overwrite samples in bufferbloat detection window is: $((bufferbloat_detection_window*ping_response_interval_us)) us." + log_msg "DEBUG" "Warning: Consider increasing bufferbloat refractory period or decreasing bufferbloat detection window." + fi + if (( reflector_response_deadline_us < 2*reflector_ping_interval_us )) + then + log_msg "DEBUG" "Warning: reflector_response_deadline_s < 2*reflector_ping_interval_s" + log_msg "DEBUG" "Warning: consider setting an increased reflector_response_deadline." + fi +fi + +# Randomize reflectors array providing randomize_reflectors set to 1 +((randomize_reflectors)) && randomize_array reflectors + +# Wait if ${startup_wait_s} > 0 +if ((startup_wait_us>0)) +then + log_msg "DEBUG" "Waiting ${startup_wait_s} seconds before startup." + sleep_us "${startup_wait_us}" +fi + +case "${pinger_binary}" in + + tsping|fping) + exec {pinger_fds[0]}<> <(:) + ;; + + ping) + for ((pinger=0; pinger<=no_pingers; pinger++)) + do + exec {pinger_fds[pinger]}<> <(:) + done + ;; + + *) + log_msg "ERROR" "Unknown pinger binary: ${pinger_binary}" + exit + ;; +esac + +monitor_achieved_rates "${rx_bytes_path}" "${tx_bytes_path}" "${monitor_achieved_rates_interval_us}" & +proc_pids['monitor_achieved_rates']="${!}" + +maintain_pingers & +proc_pids['maintain_pingers']="${!}" + +generate_log_file_scripts + +log_msg "INFO" "Started cake-autorate with PID: ${BASHPID} and config: ${config_path}" + +while true +do + unset command + read -r -u "${main_fd}" -a command + + if [[ "${command-}" ]] + then + + case "${command[0]}" in + + REFLECTOR_RESPONSE) + + read -r timestamp reflector seq dl_owd_baseline_us dl_owd_us dl_owd_delta_ewma_us dl_owd_delta_us ul_owd_baseline_us ul_owd_us ul_owd_delta_ewma_us ul_owd_delta_us <<< "${command[@]:1}" + ;; + + SET_VAR) + if [[ "${#command[@]}" -eq 3 ]] + then + export -n "${command[1]}=${command[2]}" + fi + ;; + SET_ARRAY_ELEMENT) + if [[ "${#command[@]}" -eq 4 ]] + then + declare -A "${command[1]}"+="([${command[2]}]=${command[3]})" + fi + ;; + SET_PROC_PID) + if [[ "${#command[@]}" -eq 4 ]] + then + declare -A "${command[1]}"+="([${command[2]}]=${command[3]})" + fi + true > "${run_path}/proc_pids" + for proc_pid in "${!proc_pids[@]}" + do + printf "%s=%s\n" "${proc_pid}" "${proc_pids[${proc_pid}]}" >> "${run_path}/proc_pids" + done + ;; + *) + ;; + esac + + fi + case "${main_state}" in + + RUNNING) + + if [[ "${command[0]}" == "REFLECTOR_RESPONSE" && "${timestamp-}" && "${reflector-}" && "${seq-}" && "${dl_owd_baseline_us-}" && "${dl_owd_us-}" && "${dl_owd_delta_ewma_us-}" && "${dl_owd_delta_us-}" && "${ul_owd_baseline_us-}" && "${ul_owd_us-}" && "${ul_owd_delta_ewma_us-}" && "${ul_owd_delta_us-}" ]] + then + + t_start_us=${EPOCHREALTIME/./} + + reflectors_last_timestamp_us="${timestamp//[.]}" + + if (( (t_start_us - 10#"${reflectors_last_timestamp_us}")>500000 )) + then + log_msg "DEBUG" "processed response from [${reflector}] that is > 500ms old. Skipping." + continue + fi + + # Keep track of number of delays across detection window + # .. for download: + (( dl_delays[delays_idx] )) && ((sum_dl_delays--)) + dl_delays[delays_idx]=$(( dl_owd_delta_us > compensated_dl_delay_thr_us ? 1 : 0 )) + ((dl_delays[delays_idx])) && ((sum_dl_delays++)) + # .. for upload + (( ul_delays[delays_idx] )) && ((sum_ul_delays--)) + ul_delays[delays_idx]=$(( ul_owd_delta_us > compensated_ul_delay_thr_us ? 1 : 0 )) + ((ul_delays[delays_idx])) && ((sum_ul_delays++)) + # .. and move index on + (( delays_idx=(delays_idx+1)%bufferbloat_detection_window )) + + bufferbloat_detected[dl]=$(( sum_dl_delays >= bufferbloat_detection_thr ? 1 : 0 )) + bufferbloat_detected[ul]=$(( sum_ul_delays >= bufferbloat_detection_thr ? 1 : 0 )) + + load_percent[dl]=$(( (100*achieved_rate_kbps[dl])/shaper_rate_kbps[dl] )) + load_percent[ul]=$(( (100*achieved_rate_kbps[ul])/shaper_rate_kbps[ul] )) + + classify_load "dl" + classify_load "ul" + + update_shaper_rate "dl" + update_shaper_rate "ul" + + set_shaper_rate "dl" + set_shaper_rate "ul" + + if (( output_processing_stats )) + then + printf -v processing_stats '%s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s' "${EPOCHREALTIME}" "${achieved_rate_kbps[dl]}" "${achieved_rate_kbps[ul]}" "${load_percent[dl]}" "${load_percent[ul]}" "${timestamp}" "${reflector}" "${seq}" "${dl_owd_baseline_us}" "${dl_owd_us}" "${dl_owd_delta_ewma_us}" "${dl_owd_delta_us}" "${compensated_dl_delay_thr_us}" "${ul_owd_baseline_us}" "${ul_owd_us}" "${ul_owd_delta_ewma_us}" "${ul_owd_delta_us}" "${compensated_ul_delay_thr_us}" "${sum_dl_delays}" "${sum_ul_delays}" "${load_condition[dl]}" "${load_condition[ul]}" "${shaper_rate_kbps[dl]}" "${shaper_rate_kbps[ul]}" + log_msg "DATA" "${processing_stats}" + fi + + # If base rate is sustained, increment sustained base rate timer (and break out of processing loop if enough time passes) + if (( enable_sleep_function )) + then + if [[ ${load_condition[dl]} == *idle* && ${load_condition[ul]} == *idle* ]] + then + ((t_sustained_connection_idle_us += (${EPOCHREALTIME/./}-t_end_us) )) + if ((t_sustained_connection_idle_us > sustained_idle_sleep_thr_us)) + then + change_state_main "IDLE" + + log_msg "DEBUG" "Connection idle. Waiting for minimum load." + ((min_shaper_rates_enforcement)) && set_min_shaper_rates + + # update maintain_pingers state + printf "CHANGE_STATE STOP\n" >&"${maintain_pingers_fd}" + + # reset idle timer + t_sustained_connection_idle_us=0 + fi + else + # reset timer + t_sustained_connection_idle_us=0 + fi + fi + elif (( (${EPOCHREALTIME/./} - reflectors_last_timestamp_us) > stall_detection_timeout_us )) + then + + log_msg "DEBUG" "Warning: no reflector response within: ${stall_detection_timeout_s} seconds. Checking loads." + + log_msg "DEBUG" "load check is: (( ${achieved_rate_kbps[dl]} kbps > ${connection_stall_thr_kbps} kbps for download && ${achieved_rate_kbps[ul]} kbps > ${connection_stall_thr_kbps} kbps for upload ))" + + # non-zero load so despite no reflector response within stall interval, the connection not considered to have stalled + # and therefore resume normal operation + if (( achieved_rate_kbps[dl] > connection_stall_thr_kbps && achieved_rate_kbps[ul] > connection_stall_thr_kbps )) + then + + log_msg "DEBUG" "load above connection stall threshold so resuming normal operation." + else + change_state_main "STALL" + + printf "CHANGE_STATE PAUSED\n" >&"${maintain_pingers_fd}" + + t_connection_stall_time_us="${EPOCHREALTIME//.}" + global_ping_response_timeout=0 + fi + + fi + + t_end_us="${EPOCHREALTIME/./}" + + ;; + IDLE) + if (( achieved_rate_kbps[dl] > connection_active_thr_kbps || achieved_rate_kbps[ul] > connection_active_thr_kbps )) + then + log_msg "DEBUG" "dl achieved rate: ${achieved_rate_kbps[dl]} kbps or ul achieved rate: ${achieved_rate_kbps[ul]} kbps exceeded connection active threshold: ${connection_active_thr_kbps} kbps. Resuming normal operation." + change_state_main "RUNNING" + printf "CHANGE_STATE START\n" >&"${maintain_pingers_fd}" + t_sustained_connection_idle_us=0 + # Give some time to enable pingers to get set up + reflectors_last_timestamp_us=$(( "${EPOCHREALTIME/./}" + 2*reflector_ping_interval_us )) + fi + ;; + STALL) + + [[ "${command[0]}" == "REFLECTOR_RESPONSE" && "${timestamp-}" ]] && reflectors_last_timestamp_us=${timestamp//[.]} + + if [[ "${command[0]}" == "REFLECTOR_RESPONSE" ]] || (( achieved_rate_kbps[dl] > connection_stall_thr_kbps && achieved_rate_kbps[ul] > connection_stall_thr_kbps )) + then + + log_msg "DEBUG" "Connection stall ended. Resuming normal operation." + printf "CHANGE_STATE RUNNING\n" >&"${maintain_pingers_fd}" + change_state_main "RUNNING" + + fi + + if (( global_ping_response_timeout==0 && ${EPOCHREALTIME/./} > (t_connection_stall_time_us + global_ping_response_timeout_us - stall_detection_timeout_us) )) + then + global_ping_response_timeout=1 + ((min_shaper_rates_enforcement)) && set_min_shaper_rates + log_msg "SYSLOG" "Warning: Configured global ping response timeout: ${global_ping_response_timeout_s} seconds exceeded." + log_msg "DEBUG" "Restarting pingers." + printf "CHANGE_STATE STOP\n" >&"${maintain_pingers_fd}" + printf "CHANGE_STATE START\n" >&"${maintain_pingers_fd}" + fi + ;; + *) + + log_msg "ERROR" "Unrecognized main state: ${main_state}. Exiting now." + exit 1 + ;; + esac + +done diff --git a/luci-app-sqm-autorate/root/usr/share/sqm-autorate/config.sh b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/config.sh new file mode 100755 index 000000000..509dee635 --- /dev/null +++ b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/config.sh @@ -0,0 +1,131 @@ +#!/bin/bash + +# config.sh sets up defaults for CAKE-autorate + +# config.sh is a part of CAKE-autorate +# CAKE-autorate automatically adjusts bandwidth for CAKE in dependence on detected load and RTT + +# Author: @Lynx (OpenWrt forum) +# Inspiration taken from: @moeller0 (OpenWrt forum) +# Modified by Ycarus (Yannick Chabanois) for OpenMPTCProuter: +# * Get configuration via uci + +INTERFACE=$1 + +# *** OUTPUT OPTIONS *** + +#output_processing_stats=1 # enable (1) or disable (0) output monitoring lines showing processing stats +output_processing_stats=$(uci -q get sqm.${INTERFACE}.output_processing_stats || echo "0") +#output_cake_changes=0 # enable (1) or disable (0) output monitoring lines showing cake bandwidth changes +output_cake_changes=$(uci -q get sqm.${INTERFACE}.output_cake_changes || echo "0") +#debug=0 # enable (1) or disable (0) out of debug lines +#debug=$(uci -q get sqm.common.debug || echo "0") +debug=1 + +# *** STANDARD CONFIGURATION OPTIONS *** + +#dl_if=ifb4eth1 # download interface +#dl_if=$(uci -q get sqm.${INTERFACE}.download_interface) +dl_if=ifb4$(uci -q get sqm.${INTERFACE}.interface) +#ul_if=eth1 # upload interface +#ul_if=$(uci -q get sqm.${INTERFACE}.upload_interface) +ul_if=$(uci -q get sqm.${INTERFACE}.interface) + +#reflector_ping_interval_s=0.2 # (seconds, e.g. 0.2s or 2s) +reflector_ping_interval_s=$(uci -q get sqm.${INTERFACE}.reflector_ping_interval_s || echo "0.2") + +# list of reflectors to use and number of pingers to initiate +# pingers will be initiated with reflectors in the order specified in the list +# additional reflectors will be used to replace any reflectors that go stale +# so e.g. if 6 reflectors are specified and the number of pingers is set to 4, the first 4 reflectors will be used initially +# and the remaining 2 reflectors in the list will be used in the event any of the first 4 go bad +# a bad reflector will go to the back of the queue on reflector rotation +#reflectors=("1.1.1.1" "1.0.0.1" "8.8.8.8" "8.8.4.4" "9.9.9.9" "9.9.9.10") +reflectors=($(uci get omr-tracker.defaults.hosts)) +no_pingers=$(uci -q get sqm.${INTERFACE}.no_pingers || echo "4") + +# delay threshold in ms is the extent of RTT increase to classify as a delay +# this is automatically adjusted based on maximum on the wire packet size +# (adjustment significant at sub 12Mbit/s rates, else negligible) +#delay_thr_ms=25 # (milliseconds) +delay_thr_ms=$(uci -q get sqm.${INTERFACE}.delay_thr_ms || echo "25") + +#min_dl_shaper_rate_kbps=10000 # minimum bandwidth for download (Kbit/s) +min_dl_shaper_rate_kbps=$(uci -q get sqm.${INTERFACE}.min_download) +#base_dl_shaper_rate_kbps=100000 # steady state bandwidth for download (Kbit/s) +base_dl_shaper_rate_kbps=$(uci -q get sqm.${INTERFACE}.download) +#max_dl_shaper_rate_kbps=200000 # maximum bandwidth for download (Kbit/s) +max_dl_shaper_rate_kbps=$(uci -q get sqm.${INTERFACE}.max_download) + +#min_ul_shaper_rate_kbps=10000 # minimum bandwidth for upload (Kbit/s) +min_ul_shaper_rate_kbps=$(uci -q get sqm.${INTERFACE}.min_upload) +#base_ul_shaper_rate_kbps=100000 # steady state bandwidth for upload (KBit/s) +base_ul_shaper_rate_kbps=$(uci -q get sqm.${INTERFACE}.upload) +#max_ul_shaper_rate_kbps=200000 # maximum bandwidth for upload (Kbit/s) +max_ul_shaper_rate_kbps=$(uci -q get sqm.${INTERFACE}.max_upload) + +# sleep functionality saves unecessary pings and CPU cycles by +# pausing all active pingers when connection is not in active use +#enable_sleep_function=1 # enable (1) or disable (0) sleep functonality +enable_sleep_function=$(uci -q get sqm.${INTERFACE}.enable_sleep_functions || echo "1") +#connection_active_thr_kbps=500 # threshold in Kbit/s below which dl/ul is considered idle +connection_active_thr_kbps=$(uci -q get sqm.${INTERFACE}.connection_active_thr_kbps || echo "500") +#sustained_idle_sleep_thr_s=60 # time threshold to put pingers to sleep on sustained dl/ul achieved rate < idle_thr (seconds) +sustained_idle_sleep_thr_s=$(uci -q get sqm.${INTERFACE}.substained_idle_sleep_thr_s || echo "60") + +#startup_wait_s=0 # number of seconds to wait on startup (e.g. to wait for things to settle on router reboot) +startup_wait_s=$(uci -q get sqm.${INTERFACE}.startup_wait_s || echo "60") + +# *** ADVANCED CONFIGURATION OPTIONS *** + +# interval in ms for monitoring achieved rx/tx rates +# this is automatically adjusted based on maximum on the wire packet size +# (adjustment significant at sub 12Mbit/s rates, else negligible) +monitor_achieved_rates_interval_ms=100 # (milliseconds) + +# bufferbloat is detected when (bufferbloat_detection_thr) samples +# out of the last (bufferbloat detection window) samples are delayed +bufferbloat_detection_window=4 # number of samples to retain in detection window +bufferbloat_detection_thr=2 # number of delayed samples for bufferbloat detection + +# RTT baseline against which to measure delays +# the idea is that the baseline is allowed to increase slowly to allow for path changes +# and slowly enough such that bufferbloat will be corrected well before the baseline increases, +# but it will decrease very rapidly to ensure delays are measured against the shortest path +alpha_baseline_increase=0.001 # how rapidly baseline RTT is allowed to increase +alpha_baseline_decrease=0.9 # how rapidly baseline RTT is allowed to decrease + +# rate adjustment parameters +# bufferbloat adjustment works with the lower of the adjusted achieved rate and adjusted shaper rate +# to exploit that transfer rates during bufferbloat provide an indication of line capacity +# otherwise shaper rate is adjusted up on load high, and down on load idle or low +# and held the same on load medium +achieved_rate_adjust_bufferbloat=0.9 # how rapidly to reduce achieved rate upon detection of bufferbloat +shaper_rate_adjust_bufferbloat=0.9 # how rapidly to reduce shaper rate upon detection of bufferbloat +shaper_rate_adjust_load_high=1.01 # how rapidly to increase shaper rate upon high load detected +shaper_rate_adjust_load_low=0.98 # how rapidly to return to base shaper rate upon idle or low load detected + +# the load is categoried as low if < medium_load_thr, medium if > medium_load_thr and high if > high_load_thr relative to the current shaper rate +medium_load_thr=0.25 # % of currently set bandwidth for detecting medium load +high_load_thr=0.75 # % of currently set bandwidth for detecting high load + +# refractory periods between successive bufferbloat/decay rate changes +bufferbloat_refractory_period_ms=300 # (milliseconds) +decay_refractory_period_ms=1000 # (milliseconds) + +# interval for checking reflector health +reflector_health_check_interval_s=1 # (seconds) +# deadline for reflector response not to be classified as an offence against reflector +reflector_response_deadline_s=1 # (seconds) + +# reflector misbehaving is detected when $reflector_misbehaving_detection_thr samples +# out of the last (reflector misbehaving detection window) samples are offences +# thus with a 1s interval, window 60 and detection_thr 3, this is tantamount to +# 3 offences within the last 60s +reflector_misbehaving_detection_window=60 +reflector_misbehaving_detection_thr=3 + +global_ping_response_timeout_s=10 # timeout to set shaper rates to min on no ping response whatsoever (seconds) + +if_up_check_interval_s=10 # time to wait before re-checking if rx/tx bytes files exist (e.g. from boot state) + diff --git a/luci-app-sqm-autorate/root/usr/share/sqm-autorate/config_template.sh b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/config_template.sh new file mode 100755 index 000000000..04a366a63 --- /dev/null +++ b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/config_template.sh @@ -0,0 +1,214 @@ +#!/bin/bash + +# cake-autorate automatically adjusts bandwidth for CAKE in dependence on detected load and RTT + +# cake-autorate_config.sh is a script that sets up defaults for cake-autorate + +# Author: @Lynx (OpenWrt forum) +# Inspiration taken from: @moeller0 (OpenWrt forum) + +INTERFACE=$(basename "$1" | cut -d. -f2) + +#cake_autorate_version="2.0.0" + +# *** OUTPUT AND LOGGING OPTIONS *** + +output_processing_stats=$(uci -q get sqm.${INTERFACE}.output_processing_stats || echo '0') # enable (1) or disable (0) output monitoring lines showing processing stats +output_load_stats=$(uci -q get sqm.${INTERFACE}.output_load_stats || echo '0') # enable (1) or disable (0) output monitoring lines showing achieved loads +output_reflector_stats=$(uci -q get sqm.${INTERFACE}.output_reflector_stats || echo '0') # enable (1) or disable (0) output monitoring lines showing reflector stats +output_cake_changes=$(uci -q get sqm.${INTERFACE}.output_cake_changes || echo '0') # enable (1) or disable (0) output monitoring lines showing cake bandwidth changes +debug=$(uci -q get sqm.${INTERFACE}.debug || echo '0') # enable (1) or disable (0) out of debug lines + +# This can generate a LOT of records so be careful: +log_DEBUG_messages_to_syslog=0 # enable (1) or disable (0) logging of all DEBUG records into the system log. + +# ** Take care with these settings to ensure you won't run into OOM issues on your router *** +# every write the cumulative write time and bytes associated with each log line are checked +# and if either exceeds the configured values below, the log log file is rotated +log_to_file=1 # enable (1) or disable (0) output logging to file (/tmp/cake-autorate.log) +log_file_max_time_mins=10000 # maximum time between log file rotations +log_file_max_size_KB=2000 # maximum KB (i.e. bytes/1024) worth of log lines between log file rotations + +# log file path defaults to /var/log/ +# or, if set below, then ${log_file_path_override} +log_file_path_override="" + +# *** STANDARD CONFIGURATION OPTIONS *** + +### For multihomed setups, it is the responsibility of the user to ensure that the probes +### sent by this instance of cake-autorate actually travel through these interfaces. +### See ping_extra_args and ping_prefix_string + +dl_if=ifb4$(uci -q get sqm.${INTERFACE}.interface) # download interface +ul_if=$(uci -q get sqm.${INTERFACE}.interface) # upload interface + +# pinger selection can be any of: +# fping - round robin pinging (rtts) +# ping - (iputils-ping) individual pinging (rtts) +# hping3 - individidual pinging (owds) +pinger_binary=$(uci -q get sqm.${INTERFACE}.pinger || echo 'tsping') + +# list of reflectors to use and number of pingers to initiate +# pingers will be initiated with reflectors in the order specified in the list +# additional reflectors will be used to replace any reflectors that go stale +# so e.g. if 6 reflectors are specified and the number of pingers is set to 4, the first 4 reflectors will be used initially +# and the remaining 2 reflectors in the list will be used in the event any of the first 4 go bad +# a bad reflector will go to the back of the queue on reflector rotation +#reflectors=$(uci -q get omr-tracker.defaults.hosts) +reflectors=( +"1.1.1.1" "1.0.0.1" # Cloudflare +"8.8.8.8" "8.8.4.4" # Google +"9.9.9.9" "9.9.9.10" "9.9.9.11" # Quad9 +"94.140.14.15" "94.140.14.140" "94.140.14.141" "94.140.15.15" "94.140.15.16" # AdGuard +"64.6.65.6" "156.154.70.1" "156.154.70.2" "156.154.70.3" "156.154.70.4" "156.154.70.5" "156.154.71.1" "156.154.71.2" "156.154.71.3" "156.154.71.4" "156.154.71.5" # Neustar +"208.67.220.2" "208.67.220.123" "208.67.220.220" "208.67.222.2" "208.67.222.123" # OpenDNS +"185.228.168.9" "185.228.168.10" # CleanBrowsing +) + +randomize_reflectors=1 # enable (1) or disable (0) randomization of reflectors on startup + +# Think carefully about the following settings +# to avoid excessive CPU use (proportional with ping interval / number of pingers) +# and to avoid abusive network activity (excessive ICMP frequency to one reflector) +# The author has found an ICMP rate of 1/(0.2/4) = 20 Hz to give satisfactory performance on 4G +no_pingers=$(uci -q get sqm.${INTERFACE}.no_pingers || echo "4") # number of pingers to maintain +reflector_ping_interval_s=$(uci -q get sqm.${INTERFACE}.reflector_ping_interval_s || echo "0.5") # (seconds, e.g. 0.2s or 2s) + +# delay threshold in ms is the extent of OWD increase to classify as a delay +# these are automatically adjusted based on maximum on the wire packet size +# (adjustment significant at sub 12Mbit/s rates, else negligible) +dl_delay_thr_ms=$(uci -q get sqm.${INTERFACE}.delay_thr_ms) || $(($(ping -B -w 5 -c 5 -I ${ul_if} 1.1.1.1 | cut -d '/' -s -f6 | cut -d '.' -f1 | tr -d '\n' 2>/dev/null)+30)) || echo 100 # (milliseconds) +ul_delay_thr_ms=${dl_delay_thr_ms} + +# Set either of the below to 0 to adjust one direction only +# or alternatively set both to 0 to simply use cake-autorate to monitor a connection +adjust_dl_shaper_rate=1 # enable (1) or disable (0) actually changing the dl shaper rate +adjust_ul_shaper_rate=1 # enable (1) or disable (0) actually changing the ul shaper rate + +min_dl_shaper_rate_kbps=$(uci -q get sqm.${INTERFACE}.min_download || echo "5000") # minimum bandwidth for download (Kbit/s) +base_dl_shaper_rate_kbps=$(uci -q get sqm.${INTERFACE}.download || echo "40000") # steady state bandwidth for download (Kbit/s) +max_dl_shaper_rate_kbps=$(uci -q get sqm.${INTERFACE}.max_download || echo "80000") # maximum bandwidth for download (Kbit/s) + +min_ul_shaper_rate_kbps=$(uci -q get sqm.${INTERFACE}.min_upload || echo "5000") # minimum bandwidth for upload (Kbit/s) +base_ul_shaper_rate_kbps=$(uci -q get sqm.${INTERFACE}.upload || echo "20000") # steady state bandwidth for upload (KBit/s) +max_ul_shaper_rate_kbps=$(uci -q get sqm.${INTERFACE}.max_upload || echo "35000") # maximum bandwidth for upload (Kbit/s) + +# sleep functionality saves unecessary pings and CPU cycles by +# pausing all active pingers when connection is not in active use +enable_sleep_function=$(uci -q get sqm.${INTERFACE}.enable_sleep_functions || echo "1") # enable (1) or disable (0) sleep functonality +connection_active_thr_kbps=$(uci -q get sqm.${INTERFACE}.connection_active_thr_kpbs || echo "1000") # threshold in Kbit/s below which dl/ul is considered idle +sustained_idle_sleep_thr_s=$(uci -q get sqm.${INTERFACE}.sustained_idle_sleep_thr || echo "150.0") # time threshold to put pingers to sleep on sustained dl/ul achieved rate < idle_thr (seconds) + +min_shaper_rates_enforcement=$(uci -q get sqm.${INTERFACE}.min_shaper_rates_enforcement || echo "0") # enable (1) or disable (0) dropping down to minimum shaper rates on connection idle or stall + +startup_wait_s=$(uci -q get sqm.${INTERFACE}.startup_wait_s || echo "0.0") # number of seconds to wait on startup (e.g. to wait for things to settle on router reboot) + +# *** ADVANCED CONFIGURATION OPTIONS *** + +log_file_export_compress=1 # compress log file exports using gzip and append .gz to export filename + +### In multi-homed setups, it is mandatory to use either ping_extra_args +### or ping_prefix_string to direct the pings through $dl_if and $ul_if. +### No universal recommendation exists, because there are multiple +### policy-routing packages available (e.g. vpn-policy-routing and mwan3). +### Typically they either react to a firewall mark set on the pings, or +### provide a convenient wrapper. +### +### In a traditional single-homed setup, there is usually no need for these parameters. +### +### These arguments can also be used for any other purpose - e.g. for setting a +### particular QoS mark. + +# extra arguments for ping or fping +# e.g., here is how you can set the correct outgoing interface and +# the firewall mark for ping: +# ping_extra_args="-I wwan0 -m $((0x300))" +# Unfortunately, fping does not offer a command line switch to set +# the firewall mark. +# WARNING: no error checking so use at own risk! +#ping_extra_args="-B -I ${INTERFACE}" +ping_extra_args="-i ${ul_if} -e" + +# a wrapper for ping binary - used as a prefix for the real command +# e.g., when using mwan3, it is recommended to set it like this: +# ping_prefix_string="mwan3 use gpon exec" +# WARNING: the wrapper must exec ping as the final step, not run it as a subprocess. +# Running ping or fping as a subprocess will lead to problems stopping it. +# WARNING: no error checking - so use at own risk! +ping_prefix_string="" +# interval in ms for monitoring achieved rx/tx rates +# this is automatically adjusted based on maximum on the wire packet size +# (adjustment significant at sub 12Mbit/s rates, else negligible) +monitor_achieved_rates_interval_ms=200 # (milliseconds) + +# bufferbloat is detected when (bufferbloat_detection_thr) samples +# out of the last (bufferbloat detection window) samples are delayed +bufferbloat_detection_window=6 # number of samples to retain in detection window +bufferbloat_detection_thr=3 # number of delayed samples for bufferbloat detection + +# OWD baseline against which to measure delays +# the idea is that the baseline is allowed to increase slowly to allow for path changes +# and slowly enough such that bufferbloat will be corrected well before the baseline increases, +# but it will decrease very rapidly to ensure delays are measured against the shortest path +alpha_baseline_increase=0.001 # how rapidly baseline RTT is allowed to increase +alpha_baseline_decrease=0.9 # how rapidly baseline RTT is allowed to decrease + +# OWD delta from baseline is tracked using ewma with alpha set below +alpha_delta_ewma=0.095 + +# rate adjustment parameters +# bufferbloat adjustment works with the lower of the adjusted achieved rate and adjusted shaper rate +# to exploit that transfer rates during bufferbloat provide an indication of line capacity +# otherwise shaper rate is adjusted up on load high, and down on load idle or low +achieved_rate_adjust_down_bufferbloat=0.9 # how rapidly to reduce achieved rate upon detection of bufferbloat +shaper_rate_adjust_down_bufferbloat=0.9 # how rapidly to reduce shaper rate upon detection of bufferbloat +shaper_rate_adjust_up_load_high=1.01 # how rapidly to increase shaper rate upon high load detected +shaper_rate_adjust_down_load_low=0.99 # how rapidly to return down to base shaper rate upon idle or low load detected +shaper_rate_adjust_up_load_low=1.01 # how rapidly to return up to base shaper rate upon idle or low load detected + +# the load is categoried as low if < high_load_thr and high if > high_load_thr relative to the current shaper rate +high_load_thr=0.75 # % of currently set bandwidth for detecting high load + +# refractory periods between successive bufferbloat/decay rate changes +# the bufferbloat refractory period should be greater than the +# average time it would take to replace the bufferbloat +# detection window with new samples upon a bufferbloat event +bufferbloat_refractory_period_ms=2000 # (milliseconds) +decay_refractory_period_ms=1000 # (milliseconds) + +# interval for checking reflector health +reflector_health_check_interval_s=1.0 # (seconds) +# deadline for reflector response not to be classified as an offence against reflector +reflector_response_deadline_s=2.0 # (seconds) + +# reflector misbehaving is detected when $reflector_misbehaving_detection_thr samples +# out of the last (reflector misbehaving detection window) samples are offences +# thus with a 1s interval, window 60 and detection_thr 3, this is tantamount to +# 3 offences within the last 60s +reflector_misbehaving_detection_window=60 +reflector_misbehaving_detection_thr=3 + +reflector_replacement_interval_mins=60 # how often to replace a random reflector from the present list + +reflector_comparison_interval_mins=1 # how often to compare reflectors +#reflector_sum_owd_baseline_delta_thr_ms=30 # max increase from min sum owd baselines before reflector rotated +reflector_owd_delta_ewma_delta_thr_ms=10 # mac increase from min delta ewma before reflector rotated + +# stall is detected when the following two conditions are met: +# 1) no reflector responses within $stall_detection_thr*$ping_response_interval_us; and +# 2) either $rx_achieved_rate or $tx_achieved_rate < $connection_stall_thr +stall_detection_thr=5 +connection_stall_thr_kbps=10 + +global_ping_response_timeout_s=100.0 # timeout to set shaper rates to min on no ping response whatsoever (seconds) + +if_up_check_interval_s=10.0 # time to wait before re-checking if rx/tx bytes files exist (e.g. from boot state or sleep recovery) + +# Starlink satellite switch (sss) compensation options +sss_compensation=$(uci -q get sqm.${INTERFACE}.sss_compensation || echo "0") # enable (1) or disable (0) Starlink handling +# satellite switch compensation start times in seconds of each minute +sss_times_s=("12.0" "27.0" "42.0" "57.0") +sss_compensation_pre_duration_ms=300 +sss_compensation_post_duration_ms=200 + +config_file_check="cake-autorate" \ No newline at end of file diff --git a/luci-app-sqm-autorate/root/usr/share/sqm-autorate/defaults.sh b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/defaults.sh new file mode 100755 index 000000000..1ef1af429 --- /dev/null +++ b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/defaults.sh @@ -0,0 +1,209 @@ +#!/bin/bash + +# cake-autorate automatically adjusts bandwidth for CAKE in dependence on detected load and RTT + +# cake-autorate_config.sh is a script that sets up defaults for cake-autorate + +# Author: @Lynx (OpenWrt forum) +# Inspiration taken from: @moeller0 (OpenWrt forum) + +INTERFACE="" + +# *** OUTPUT AND LOGGING OPTIONS *** + +output_processing_stats=1 # enable (1) or disable (0) output monitoring lines showing processing stats +output_load_stats=1 # enable (1) or disable (0) output monitoring lines showing achieved loads +output_reflector_stats=1 # enable (1) or disable (0) output monitoring lines showing reflector stats +output_cake_changes=0 # enable (1) or disable (0) output monitoring lines showing cake bandwidth changes +debug=1 # enable (1) or disable (0) out of debug lines + +# This can generate a LOT of records so be careful: +log_DEBUG_messages_to_syslog=0 # enable (1) or disable (0) logging of all DEBUG records into the system log. + +# ** Take care with these settings to ensure you won't run into OOM issues on your router *** +# every write the cumulative write time and bytes associated with each log line are checked +# and if either exceeds the configured values below, the log log file is rotated +log_to_file=1 # enable (1) or disable (0) output logging to file (/tmp/cake-autorate.log) +log_file_max_time_mins=10 # maximum time between log file rotations +log_file_max_size_KB=2000 # maximum KB (i.e. bytes/1024) worth of log lines between log file rotations + +# log file path defaults to /var/log/ +# or, if set below, then ${log_file_path_override} +log_file_path_override="" + +# *** STANDARD CONFIGURATION OPTIONS *** + +### For multihomed setups, it is the responsibility of the user to ensure that the probes +### sent by this instance of cake-autorate actually travel through these interfaces. +### See ping_extra_args and ping_prefix_string + +dl_if=ifb-wan # download interface +ul_if=wan # upload interface + +# pinger selection can be any of: +# fping - round robin pinging (rtts) +# ping - (iputils-ping) individual pinging (rtts) +# hping3 - individidual pinging (owds) +pinger_binary=fping + +# list of reflectors to use and number of pingers to initiate +# pingers will be initiated with reflectors in the order specified in the list +# additional reflectors will be used to replace any reflectors that go stale +# so e.g. if 6 reflectors are specified and the number of pingers is set to 4, the first 4 reflectors will be used initially +# and the remaining 2 reflectors in the list will be used in the event any of the first 4 go bad +# a bad reflector will go to the back of the queue on reflector rotation +reflectors=( +"1.1.1.1" "1.0.0.1" # Cloudflare +"8.8.8.8" "8.8.4.4" # Google +"9.9.9.9" "9.9.9.10" "9.9.9.11" # Quad9 +"94.140.14.15" "94.140.14.140" "94.140.14.141" "94.140.15.15" "94.140.15.16" # AdGuard +"64.6.65.6" "156.154.70.1" "156.154.70.2" "156.154.70.3" "156.154.70.4" "156.154.70.5" "156.154.71.1" "156.154.71.2" "156.154.71.3" "156.154.71.4" "156.154.71.5" # Neustar +"208.67.220.2" "208.67.220.123" "208.67.220.220" "208.67.222.2" "208.67.222.123" # OpenDNS +"185.228.168.9" "185.228.168.10" # CleanBrowsing +) + +randomize_reflectors=1 # enable (1) or disable (0) randomization of reflectors on startup + +# Think carefully about the following settings +# to avoid excessive CPU use (proportional with ping interval / number of pingers) +# and to avoid abusive network activity (excessive ICMP frequency to one reflector) +# The author has found an ICMP rate of 1/(0.2/4) = 20 Hz to give satisfactory performance on 4G +no_pingers=6 # number of pingers to maintain +reflector_ping_interval_s=0.3 # (seconds, e.g. 0.2s or 2s) + +# delay threshold in ms is the extent of OWD increase to classify as a delay +# these are automatically adjusted based on maximum on the wire packet size +# (adjustment significant at sub 12Mbit/s rates, else negligible) +dl_delay_thr_ms=30 # (milliseconds) +ul_delay_thr_ms=30 # (milliseconds) + +# Set either of the below to 0 to adjust one direction only +# or alternatively set both to 0 to simply use cake-autorate to monitor a connection +adjust_dl_shaper_rate=1 # enable (1) or disable (0) actually changing the dl shaper rate +adjust_ul_shaper_rate=1 # enable (1) or disable (0) actually changing the ul shaper rate + +min_dl_shaper_rate_kbps=5000 # minimum bandwidth for download (Kbit/s) +base_dl_shaper_rate_kbps=20000 # steady state bandwidth for download (Kbit/s) +max_dl_shaper_rate_kbps=80000 # maximum bandwidth for download (Kbit/s) + +min_ul_shaper_rate_kbps=5000 # minimum bandwidth for upload (Kbit/s) +base_ul_shaper_rate_kbps=20000 # steady state bandwidth for upload (KBit/s) +max_ul_shaper_rate_kbps=35000 # maximum bandwidth for upload (Kbit/s) + +# sleep functionality saves unecessary pings and CPU cycles by +# pausing all active pingers when connection is not in active use +enable_sleep_function=1 # enable (1) or disable (0) sleep functonality +connection_active_thr_kbps=1000 # threshold in Kbit/s below which dl/ul is considered idle +sustained_idle_sleep_thr_s=60.0 # time threshold to put pingers to sleep on sustained dl/ul achieved rate < idle_thr (seconds) + +min_shaper_rates_enforcement=0 # enable (1) or disable (0) dropping down to minimum shaper rates on connection idle or stall + +startup_wait_s=0.0 # number of seconds to wait on startup (e.g. to wait for things to settle on router reboot) + +# *** ADVANCED CONFIGURATION OPTIONS *** + +log_file_export_compress=1 # compress log file exports using gzip and append .gz to export filename + +### In multi-homed setups, it is mandatory to use either ping_extra_args +### or ping_prefix_string to direct the pings through $dl_if and $ul_if. +### No universal recommendation exists, because there are multiple +### policy-routing packages available (e.g. vpn-policy-routing and mwan3). +### Typically they either react to a firewall mark set on the pings, or +### provide a convenient wrapper. +### +### In a traditional single-homed setup, there is usually no need for these parameters. +### +### These arguments can also be used for any other purpose - e.g. for setting a +### particular QoS mark. + +# extra arguments for ping or fping +# e.g., here is how you can set the correct outgoing interface and +# the firewall mark for ping: +# ping_extra_args="-I wwan0 -m $((0x300))" +# Unfortunately, fping does not offer a command line switch to set +# the firewall mark. +# WARNING: no error checking so use at own risk! +ping_extra_args="" + +# a wrapper for ping binary - used as a prefix for the real command +# e.g., when using mwan3, it is recommended to set it like this: +# ping_prefix_string="mwan3 use gpon exec" +# WARNING: the wrapper must exec ping as the final step, not run it as a subprocess. +# Running ping or fping as a subprocess will lead to problems stopping it. +# WARNING: no error checking - so use at own risk! +ping_prefix_string="" + +# interval in ms for monitoring achieved rx/tx rates +# this is automatically adjusted based on maximum on the wire packet size +# (adjustment significant at sub 12Mbit/s rates, else negligible) +monitor_achieved_rates_interval_ms=200 # (milliseconds) + +# bufferbloat is detected when (bufferbloat_detection_thr) samples +# out of the last (bufferbloat detection window) samples are delayed +bufferbloat_detection_window=6 # number of samples to retain in detection window +bufferbloat_detection_thr=3 # number of delayed samples for bufferbloat detection + +# OWD baseline against which to measure delays +# the idea is that the baseline is allowed to increase slowly to allow for path changes +# and slowly enough such that bufferbloat will be corrected well before the baseline increases, +# but it will decrease very rapidly to ensure delays are measured against the shortest path +alpha_baseline_increase=0.001 # how rapidly baseline RTT is allowed to increase +alpha_baseline_decrease=0.9 # how rapidly baseline RTT is allowed to decrease + +# OWD delta from baseline is tracked using ewma with alpha set below +alpha_delta_ewma=0.095 + +# rate adjustment parameters +# bufferbloat adjustment works with the lower of the adjusted achieved rate and adjusted shaper rate +# to exploit that transfer rates during bufferbloat provide an indication of line capacity +# otherwise shaper rate is adjusted up on load high, and down on load idle or low +achieved_rate_adjust_down_bufferbloat=0.9 # how rapidly to reduce achieved rate upon detection of bufferbloat +shaper_rate_adjust_down_bufferbloat=0.9 # how rapidly to reduce shaper rate upon detection of bufferbloat +shaper_rate_adjust_up_load_high=1.01 # how rapidly to increase shaper rate upon high load detected +shaper_rate_adjust_down_load_low=0.99 # how rapidly to return down to base shaper rate upon idle or low load detected +shaper_rate_adjust_up_load_low=1.01 # how rapidly to return up to base shaper rate upon idle or low load detected + +# the load is categoried as low if < high_load_thr and high if > high_load_thr relative to the current shaper rate +high_load_thr=0.75 # % of currently set bandwidth for detecting high load + +# refractory periods between successive bufferbloat/decay rate changes +# the bufferbloat refractory period should be greater than the +# average time it would take to replace the bufferbloat +# detection window with new samples upon a bufferbloat event +bufferbloat_refractory_period_ms=300 # (milliseconds) +decay_refractory_period_ms=1000 # (milliseconds) + +# interval for checking reflector health +reflector_health_check_interval_s=1.0 # (seconds) +# deadline for reflector response not to be classified as an offence against reflector +reflector_response_deadline_s=1.0 # (seconds) + +# reflector misbehaving is detected when $reflector_misbehaving_detection_thr samples +# out of the last (reflector misbehaving detection window) samples are offences +# thus with a 1s interval, window 60 and detection_thr 3, this is tantamount to +# 3 offences within the last 60s +reflector_misbehaving_detection_window=60 +reflector_misbehaving_detection_thr=3 + +reflector_replacement_interval_mins=60 # how often to replace a random reflector from the present list + +reflector_comparison_interval_mins=1 # how often to compare reflectors +reflector_sum_owd_baselines_delta_thr_ms=20 # max increase from min sum owd baselines before reflector rotated +reflector_owd_delta_ewma_delta_thr_ms=10 # max increase from min delta ewma before reflector rotated + +# stall is detected when the following two conditions are met: +# 1) no reflector responses within $stall_detection_thr*$ping_response_interval_us; and +# 2) either $rx_achieved_rate or $tx_achieved_rate < $connection_stall_thr +stall_detection_thr=5 +connection_stall_thr_kbps=10 + +global_ping_response_timeout_s=10.0 # timeout to set shaper rates to min on no ping response whatsoever (seconds) + +if_up_check_interval_s=10.0 # time to wait before re-checking if rx/tx bytes files exist (e.g. from boot state or sleep recovery) + +# Starlink satellite switch (sss) compensation options +sss_compensation=0 # enable (1) or disable (0) Starlink handling +# satellite switch compensation start times in seconds of each minute +sss_times_s=("12.0" "27.0" "42.0" "57.0") +sss_compensation_pre_duration_ms=300 +sss_compensation_post_duration_ms=200 diff --git a/luci-app-sqm-autorate/root/usr/share/sqm-autorate/launcher.sh b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/launcher.sh new file mode 100755 index 000000000..7cb3567df --- /dev/null +++ b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/launcher.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +cake_instances=(/root/cake-autorate/config.*.sh) +cake_instance_pids=() + +trap kill_cake_instances INT TERM EXIT + +kill_cake_instances() +{ + trap - INT TERM EXIT + + echo "Killing all instances of cake one-by-one now." + + for ((cake_instance=0; cake_instance<${#cake_instances[@]}; cake_instance++)) + do + kill "${cake_instance_pids[${cake_instance}]}" 2>/dev/null || true + done + wait +} + +for cake_instance in "${cake_instances[@]}" +do + /root/cake-autorate/cake-autorate.sh "${cake_instance}" & + cake_instance_pids+=(${!}) +done +wait diff --git a/luci-app-sqm-autorate/root/usr/share/sqm-autorate/lib.sh b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/lib.sh new file mode 100755 index 000000000..19141fc74 --- /dev/null +++ b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/lib.sh @@ -0,0 +1,149 @@ +#!/bin/bash + +# lib.sh -- common functions for use by cake-autorate.sh +# +# This file is part of cake-autorate. + +__set_e=0 +if [[ ! ${-} =~ e ]] +then + set -e + __set_e=1 +fi + +if [[ -z "${__sleep_fd:-}" ]] +then + exec {__sleep_fd}<> <(:) +fi + +typeof() { + # typeof -- returns the type of a variable + + local type_sig + type_sig=$(declare -p "${1}" 2>/dev/null) + if [[ "${type_sig}" =~ "declare --" ]] + then + str_type "${1}" + elif [[ "${type_sig}" =~ "declare -a" ]] + then + printf "array" + elif [[ "${type_sig}" =~ "declare -A" ]] + then + printf "map" + else + printf "none" + fi +} + +str_type() { + # str_type -- returns the type of a string + + local -n str="${1}" + + if [[ "${str}" =~ ^[0-9]+$ ]] + then + printf "integer" + elif [[ "${str}" =~ ^[0-9]*\.[0-9]+$ ]] + then + printf "float" + elif [[ "${str}" =~ ^-[0-9]+$ ]] + then + printf "negative-integer" + elif [[ "${str}" =~ ^-[0-9]*\.[0-9]+$ ]] + then + printf "negative-float" + else + # technically not validated, user is just trusted to call + # this function with valid strings + printf "string" + fi +} + +sleep_s() +{ + # Calling the external sleep binary could be rather slow, + # especially as it is called very frequently and typically on mediocre hardware. + # + # bash's loadable sleep module is not typically available + # in OpenWRT and most embedded systems, and use of the bash + # read command with a timeout offers performance that is + # at least on a par with bash's sleep module. + # + # For benchmarks, check the following links: + # - https://github.com/lynxthecat/cake-autorate/issues/174#issuecomment-1460057382 + # - https://github.com/lynxthecat/cake-autorate/issues/174#issuecomment-1460074498 + + local sleep_duration_s=${1} # (seconds, e.g. 0.5, 1 or 1.5) + read -r -t "${sleep_duration_s}" -u "${__sleep_fd}" || true +} + +sleep_us() +{ + local sleep_duration_us=${1} # (microseconds) + + sleep_duration_s=000000${sleep_duration_us} + sleep_duration_s=$((10#${sleep_duration_s::-6})).${sleep_duration_s: -6} + sleep_s "${sleep_duration_s}" +} + +sleep_remaining_tick_time() +{ + # sleeps until the end of the tick duration + + local t_start_us=${1} # (microseconds) + local tick_duration_us=${2} # (microseconds) + + # shellcheck disable=SC2154 + sleep_duration_us=$(( t_start_us + tick_duration_us - ${EPOCHREALTIME/./} )) + + if (( sleep_duration_us > 0 )); then + sleep_us "${sleep_duration_us}" + fi +} + +randomize_array() +{ + # randomize the order of the elements of an array + + local -n array=${1} + + subset=("${array[@]}") + array=() + for ((set=${#subset[@]}; set>0; set--)) + do + idx=$((RANDOM%set)) + array+=("${subset[idx]}") + unset "subset[idx]" + subset=("${subset[@]}") + done +} + +terminate() +{ + # Send regular kill to processes and monitor terminations; + # return as soon as all of the active processes terminate; + # if any processes remain active after one second, kill with fire using kill -9; + # and, finally, call wait on all processes to reap any zombie processes. + + local pids=("${@:-}") + + kill "${pids[@]}" 2> /dev/null + + for((i=0; i<10; i++)) + do + for process in "${!pids[@]}" + do + kill -0 "${pids[${process}]}" 2> /dev/null || unset "pids[${process}]" + done + [[ "${pids[*]}" ]] || return + sleep_s 0.1 + done + + kill -9 "${pids[@]}" 2> /dev/null +} + +if (( __set_e == 1 )) +then + set +e +fi +unset __set_e diff --git a/luci-app-sysupgrade/Makefile b/luci-app-sysupgrade/Makefile new file mode 100755 index 000000000..3b5ccc6dc --- /dev/null +++ b/luci-app-sysupgrade/Makefile @@ -0,0 +1,11 @@ +# See /LICENSE for more information. +# This is free software, licensed under the GNU General Public License v2. + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for sysupgrades +LUCI_DEPENDS:=+luci-base +uhttpd-mod-ubus +rpcd +rpcd-mod-rpcsys +cgi-io + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-sysupgrade/luasrc/view/sysupgrade.htm b/luci-app-sysupgrade/luasrc/view/sysupgrade.htm new file mode 100755 index 000000000..a7706bc79 --- /dev/null +++ b/luci-app-sysupgrade/luasrc/view/sysupgrade.htm @@ -0,0 +1,126 @@ +<% +-- all lua code provided by https://github.com/jow-/ +-- thank you very much! + + function apply_acls(filename, session) + local json = require "luci.jsonc" + local util = require "luci.util" + local fs = require "nixio.fs" + + local grants = { } + + local acl = json.parse(fs.readfile(filename)) + if type(acl) ~= "table" then + return + end + + local group, perms + for group, perms in pairs(acl) do + local perm, scopes + for perm, scopes in pairs(perms) do + if type(scopes) == "table" then + local scope, objects + for scope, objects in pairs(scopes) do + if type(objects) == "table" then + if not grants[scope] then + grants[scope] = { } + end + + if next(objects) == 1 then + local _, object + for _, object in ipairs(objects) do + if not grants[scope][object] then + grants[scope][object] = { } + end + table.insert(grants[scope][object], perm) + end + else + local object, funcs + for object, funcs in pairs(objects) do + if type(funcs) == "table" then + local _, func + for _, func in ipairs(funcs) do + if not grants[scope][object] then + grants[scope][object] = { } + end + table.insert(grants[scope][object], func) + end + end + end + end + end + end + end + end + end + + local _, scope, object, func + for scope, _ in pairs(grants) do + local objects = { } + for object, _ in pairs(_) do + for _, func in ipairs(_) do + table.insert(objects, { object, func }) + end + end + + util.ubus("session", "grant", { + ubus_rpc_session = session, + scope = scope, objects = objects + }) + end + end + + apply_acls("/usr/share/rpcd/acl.d/sysupgrade.json", luci.dispatcher.context.authsession) +%> +<%+header%> +

<%:Sysupgrade%>

+
+ <%:Easily search and install new releases and package upgrades.%> +
+ + +

+ +

+
+
+
+ + + + +
+
+ +
+
+
+
+
+ + +<%+footer%> diff --git a/luci-app-sysupgrade/po/fr/sysupgrade.po b/luci-app-sysupgrade/po/fr/sysupgrade.po new file mode 100755 index 000000000..8195816c5 --- /dev/null +++ b/luci-app-sysupgrade/po/fr/sysupgrade.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-03-31 15:07+0000\n" +"Last-Translator: Weblate Admin \n" +"Language-Team: French \n" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.5.2\n" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:90 +msgid "Check \"Keep settings\" to retain the current configuration." +msgstr "" +"Cochez \"Conserver les paramètres\" pour conserver la configuration actuelle." + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:344 +msgid "Downloading firmware to web browser memory" +msgstr "Téléchargement du micrologiciel dans la mémoire du navigateur Web" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:78 +msgid "Easily search and install new releases and package upgrades." +msgstr "" +"Recherchez et installez facilement les nouvelles versions et les mises à " +"niveau des paquets." + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:99 +msgid "Edit installed packages" +msgstr "Modifier les packages installés" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:269 +msgid "Flashing firmware. Don't unpower device" +msgstr "Mise à jour du micrologiciel. Ne débranchez pas l'appareil" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:192 +msgid "Installed version:" +msgstr "Version installée :" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:92 +msgid "Keep settings:" +msgstr "Conserver les paramètres :" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:215 +msgid "No upgrades available" +msgstr "Pas de mise à jour disponible" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:285 +msgid "Rebooting device - please wait!" +msgstr "Redémarrage de l'appareil - veuillez patienter !" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:209 +msgid "Request firmware" +msgstr "Demander le micrologiciel" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:113 +msgid "Search for upgrades" +msgstr "Rechercher des mises à jour" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:165 +msgid "Searching for upgrades" +msgstr "Recherche des mises à jour" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:104 +msgid "Server:" +msgstr "Serveur :" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:289 +msgid "Success! Please reload web interface" +msgstr "Succès ! Veuillez recharger l'interface Web" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:76 +#: luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json:3 +msgid "Sysupgrade" +msgstr "Mise à jour système" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:320 +msgid "Upload of firmware failed, please retry by reloading web interface" +msgstr "" +"Le téléchargement du micrologiciel a échoué, veuillez réessayer en " +"rechargeant l'interface Web" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:305 +msgid "Uploading firmware to device" +msgstr "Téléchargement du micrologiciel sur l'appareil" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:299 +msgid "" +"Web interface could not reconnect to your device. Please reload web " +"interface or check device manually" +msgstr "" +"L'interface Web n'a pas pu se reconnecter à votre appareil. Recharger " +"l'interface" + +#: luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json:3 +msgid "sysupgrade via rpcd and luci" +msgstr "Mise à jour système via rpcd et luci" diff --git a/luci-app-sysupgrade/po/ru/sysupgrade.po b/luci-app-sysupgrade/po/ru/sysupgrade.po new file mode 100755 index 000000000..742b59652 --- /dev/null +++ b/luci-app-sysupgrade/po/ru/sysupgrade.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-06-16 10:51+0000\n" +"Last-Translator: Dmitry Galenko \n" +"Language-Team: Russian \n" +"Language: ru\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.6.1\n" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:90 +msgid "Check \"Keep settings\" to retain the current configuration." +msgstr "" +"Поставьте \"Сохранить настройки\", чтобы сохранить текущую конфигурацию." + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:344 +msgid "Downloading firmware to web browser memory" +msgstr "Загружаем ПО в память вашего браузера" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:78 +msgid "Easily search and install new releases and package upgrades." +msgstr "Легко ищите и устанавливайте новые версии ПО и обновления пакетов." + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:99 +msgid "Edit installed packages" +msgstr "Редактировать список установленных пакетов" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:269 +msgid "Flashing firmware. Don't unpower device" +msgstr "Обновляем ПО маршрутизатора. Не выключайте питание вашего устройства" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:192 +msgid "Installed version:" +msgstr "Установленная версия:" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:92 +msgid "Keep settings:" +msgstr "Сохранить настройки:" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:215 +msgid "No upgrades available" +msgstr "Обновления не найдены" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:285 +msgid "Rebooting device - please wait!" +msgstr "Перезагружаем роутер, пожалуйста подождите!" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:209 +msgid "Request firmware" +msgstr "Загрузить ПО" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:113 +msgid "Search for upgrades" +msgstr "Поиск обновлений" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:165 +msgid "Searching for upgrades" +msgstr "Поиск обновлений" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:104 +msgid "Server:" +msgstr "Сервер:" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:289 +msgid "Success! Please reload web interface" +msgstr "Успешно! Пожалуйста обновите страницу" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:76 +#: luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json:3 +msgid "Sysupgrade" +msgstr "sysupgrade" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:320 +msgid "Upload of firmware failed, please retry by reloading web interface" +msgstr "" +"Ошибка при загрузке обновлений ПО. Для продолжения, пожалуйста обновите " +"страницу" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:305 +msgid "Uploading firmware to device" +msgstr "Загружаем обновления ПО в память роутера" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:299 +msgid "" +"Web interface could not reconnect to your device. Please reload web " +"interface or check device manually" +msgstr "Проблема при подключении к роутеру. Пожалуйста обновите страницу" + +#: luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json:3 +msgid "sysupgrade via rpcd and luci" +msgstr "sysupgrade с использованием RPCd и LUCI" diff --git a/luci-app-sysupgrade/po/templates/sysupgrade.pot b/luci-app-sysupgrade/po/templates/sysupgrade.pot new file mode 100755 index 000000000..1ebb8dc2e --- /dev/null +++ b/luci-app-sysupgrade/po/templates/sysupgrade.pot @@ -0,0 +1,81 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:90 +msgid "Check \"Keep settings\" to retain the current configuration." +msgstr "" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:344 +msgid "Downloading firmware to web browser memory" +msgstr "" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:78 +msgid "Easily search and install new releases and package upgrades." +msgstr "" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:99 +msgid "Edit installed packages" +msgstr "" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:269 +msgid "Flashing firmware. Don't unpower device" +msgstr "" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:192 +msgid "Installed version:" +msgstr "" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:92 +msgid "Keep settings:" +msgstr "" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:215 +msgid "No upgrades available" +msgstr "" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:285 +msgid "Rebooting device - please wait!" +msgstr "" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:209 +msgid "Request firmware" +msgstr "" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:113 +msgid "Search for upgrades" +msgstr "" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:165 +msgid "Searching for upgrades" +msgstr "" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:104 +msgid "Server:" +msgstr "" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:289 +msgid "Success! Please reload web interface" +msgstr "" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:76 +#: luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json:3 +msgid "Sysupgrade" +msgstr "" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:320 +msgid "Upload of firmware failed, please retry by reloading web interface" +msgstr "" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:305 +msgid "Uploading firmware to device" +msgstr "" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:299 +msgid "" +"Web interface could not reconnect to your device. Please reload web " +"interface or check device manually" +msgstr "" + +#: luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json:3 +msgid "sysupgrade via rpcd and luci" +msgstr "" diff --git a/luci-app-sysupgrade/po/zh_Hans/sysupgrade.po b/luci-app-sysupgrade/po/zh_Hans/sysupgrade.po new file mode 100755 index 000000000..e68dec985 --- /dev/null +++ b/luci-app-sysupgrade/po/zh_Hans/sysupgrade.po @@ -0,0 +1,90 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-05-03 07:27+0000\n" +"Last-Translator: niergouge <1150108426@qq.com>\n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.5.2\n" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:90 +msgid "Check \"Keep settings\" to retain the current configuration." +msgstr "勾选保持当前配置。" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:344 +msgid "Downloading firmware to web browser memory" +msgstr "下载固件到网页浏览器内存" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:78 +msgid "Easily search and install new releases and package upgrades." +msgstr "轻松搜索和安装新版本升级固件包。" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:99 +msgid "Edit installed packages" +msgstr "编辑安装包" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:269 +msgid "Flashing firmware. Don't unpower device" +msgstr "设备升级中。请不要断开电源" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:192 +msgid "Installed version:" +msgstr "安装的版本:" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:92 +msgid "Keep settings:" +msgstr "保持设置:" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:215 +msgid "No upgrades available" +msgstr "没有升级" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:285 +msgid "Rebooting device - please wait!" +msgstr "正在重启设备-请稍候!" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:209 +msgid "Request firmware" +msgstr "请求固件" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:113 +msgid "Search for upgrades" +msgstr "搜索升级" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:165 +msgid "Searching for upgrades" +msgstr "搜索升级" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:104 +msgid "Server:" +msgstr "服务器:" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:289 +msgid "Success! Please reload web interface" +msgstr "成功!请重新加载web界面" + +#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:76 +#: luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json:3 +msgid "Sysupgrade" +msgstr "系统升级" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:320 +msgid "Upload of firmware failed, please retry by reloading web interface" +msgstr "轻松搜索和安装新版本的系统进行升级" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:305 +msgid "Uploading firmware to device" +msgstr "上传固件到设备" + +#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:299 +msgid "" +"Web interface could not reconnect to your device. Please reload web " +"interface or check device manually" +msgstr "网络界面无法重新连接到您的设备。请重新加载web界面或手动检查设备" + +#: luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json:3 +msgid "sysupgrade via rpcd and luci" +msgstr "通过RPCD和luci进行升级" diff --git a/luci-app-sysupgrade/root/etc/init.d/sysupgrade b/luci-app-sysupgrade/root/etc/init.d/sysupgrade new file mode 100755 index 000000000..9ffc3c537 --- /dev/null +++ b/luci-app-sysupgrade/root/etc/init.d/sysupgrade @@ -0,0 +1,20 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2020-2021 Ycarus (Yannick Chabanois) +# Released under GPL 3. See LICENSE for the full terms. + +{ + START=99 + STOP=10 + USE_PROCD=1 +} + +start_service() +{ + if [ -f /etc/backup/installed_packages.txt ]; then + if [ "$(opkg -V0 update 2>&1)" = "" ]; then + grep "\toverlay" /etc/backup/installed_packages.txt | cut -f1 | xargs -r opkg -V0 install + rm /etc/backup/installed_packages.txt + fi + fi +} + diff --git a/luci-app-sysupgrade/root/etc/uci-defaults/40_luci-sysupgrade b/luci-app-sysupgrade/root/etc/uci-defaults/40_luci-sysupgrade new file mode 100755 index 000000000..a5ef66fe8 --- /dev/null +++ b/luci-app-sysupgrade/root/etc/uci-defaults/40_luci-sysupgrade @@ -0,0 +1,20 @@ +#!/bin/sh + +/etc/init.d/uhttpd restart +/etc/init.d/rpcd reload + +[ -e /etc/config/sysupgrade ] && return 0 + +touch /etc/config/sysupgrade + +uci -q batch < + ubus_call("uci", "get", option, option["option"]) +} + +ubus_counter = 0; +ubus_closed = 0; + +function ubus_call(command, argument, params, variable) { + var request_data = {}; + request_data.jsonrpc = "2.0"; + request_data.id = ubus_counter; + request_data.method = "call"; + request_data.params = [data.ubus_rpc_session, command, argument, params] + var request_json = JSON.stringify(request_data) + ubus_counter++; + var request = new XMLHttpRequest(); + request.open("POST", ubus_url, true); + request.setRequestHeader("Content-type", "application/json"); + request.onload = function(event) { + if (request.status === 200) { + var response = JSON.parse(request.responseText) + if (!("error" in response) && "result" in response) { + if (response.result.length === 2) { + if (command === "uci") { + data[variable] = response.result[1].value + } else { + data[variable] = response.result[1][variable] + } + } + } else { + set_status("danger", "Ubus call failed:
Request: " + request_json + "
Response: " + JSON.stringify(response)) + } + ubus_closed++; + } + } + request.send(request_json); +} + +function set_status(type, message, loading, show_log) { + $("#status_box").className = "alert-message " + type; + var loading_image = ''; + if (loading) { + loading_image = 'Loading '; + } + if (data.buildlog_url && show_log) { + message += '

Build log

' + } + $("#status_box").innerHTML = loading_image + message; + show("#status_box") +} + +function upgrade_check() { + var current_version = data.release.version.toLowerCase(); + var current_branch = current_version.split('-')[0].split('.').slice(0, 2).join('.') + var candidates = [] + hide("#status_box"); + hide("#server_div"); + set_status("info", _("Searching for upgrades"), true); + fetch(data.url + "/api/versions?v=" + Date.now()) + .then(response => response.json()) + .then(response => { + var branches = response["branches"] + for (i in branches) { + // handle snapshots in a special way - as always + if (current_version == "snapshot" && branches[i]["latest"] == "snapshot") { + candidates.unshift(branches[i]) + break + } + + if (current_version == branches[i]["latest"]) { + break + } + if (current_branch != branches[i]["name"]) { + branches[i]["warn_branch_jump"] = true + } + candidates.unshift(branches[i]) + if (current_branch == branches[i]["name"]) { + // don't offer branches older than the current + break + } + } + + if (candidates.length > 0) { + var info_output = "

New release " + candidates[0].latest + " available

" + info_output += _('Installed version:') + " " + data.release.version + + // tell server the currently installed version + request_dict.current_version = request_dict.version; + // tell server what version to install + request_dict.version = candidates[0].latest; + // tell server to diff the requested packages with the default packages + // this allows to not automatically re-install default packages which + // where dropped in later releases + request_dict.diff_packages = true; + + set_status("success", info_output) + + if (data.advanced_mode == 1) { + show("#edit_button"); + } + var upgrade_button = $("#upgrade_button") + upgrade_button.value = _("Request firmware"); + upgrade_button.style.display = "block"; + upgrade_button.disabled = false; + upgrade_button.onclick = upgrade_request; + + } else { + set_status("success", _("No upgrades available")) + + } + }); + +} + +function upgrade_request() { + // Request firmware using the following parameters + // distro, version, target, board_name, packages + $("#upgrade_button").disabled = true; + hide("#edit_packages"); + hide("#edit_button"); + hide("#keep_container"); + + // add board info to let server determine profile + request_dict.target = data.release.target + request_dict.profile = data.board_name + request_dict.rootfs = data.format + request_dict.efi = data.efi_enabled + + if (data.edit_packages == true) { + request_dict.packages = $("#edit_packages").value.split("\n") + } else { + request_dict.packages = Object.keys(data.packages); + } + server_request() +} + +function upgrade_request_callback(response) { + var sysupgrade_file = ""; + console.log(response) + for (i in response.images) { + if (response.images[i].type == "sysupgrade") { + sysupgrade_file = response.images[i].name; + } + } + if (sysupgrade_file != "") { + data.sysupgrade_url = data.url + '/release/' + response.bin_dir + '/' + sysupgrade_file + var info_output = '

Firmware searched

File: ' + sysupgrade_file + '

' + set_status("success", info_output, false, true); + + show("#keep_container"); + var upgrade_button = $("#upgrade_button") + upgrade_button.disabled = false; + upgrade_button.style.display = "block"; + upgrade_button.value = "Flash firmware"; + upgrade_button.onclick = download_image; + } else { + set_status("danger", "Device not sysupgrade compatible!") + } +} + +function flash_image() { + // Flash image via rpc-sys upgrade_start + set_status("warning", _("Flashing firmware. Don't unpower device"), true) + ubus_call("rpc-sys", "upgrade_start", { + "keep": $("#keep").checked + }, 'message'); + ping_max = 3600; // in seconds + setTimeout(ping_ubus, 10000) +} + +function ping_ubus() { + // Tries to connect to ubus. If the connection fails the device is likely still rebooting. + // If more time than ping_max passes update may failed + if (ping_max > 0) { + ping_max--; + var request = new XMLHttpRequest(); + request.open("GET", ubus_url, true); + request.addEventListener('error', function(event) { + set_status("warning", _("Rebooting device - please wait!"), true); + setTimeout(ping_ubus, 5000) + }); + request.addEventListener('load', function(event) { + set_status("success", _("Success! Please reload web interface")); + $("#upgrade_button").value = "Reload page"; + show("#upgrade_button"); + $("#upgrade_button").disabled = false; + $("#upgrade_button").onclick = function() { + location.reload(); + } + }); + request.send(); + } else { + set_status("danger", _("Web interface could not reconnect to your device. Please reload web interface or check device manually")) + } +} + +function upload_image(blob) { + // Uploads received blob data to the server using cgi-io + set_status("info", _("Uploading firmware to device"), true); + var request = new XMLHttpRequest(); + var form_data = new FormData(); + + form_data.append("sessionid", data.ubus_rpc_session) + form_data.append("filename", "/tmp/firmware.bin") + form_data.append("filemode", 755) // insecure? + form_data.append("filedata", blob) + + request.addEventListener('load', function(event) { + request_json = JSON.parse(request.responseText) + flash_image(); + }); + + request.addEventListener('error', function(event) { + set_status("danger", _("Upload of firmware failed, please retry by reloading web interface")) + }); + + request.open('POST', origin + '/cgi-bin/cgi-upload'); + request.send(form_data); +} + + +function download_image() { + // Download image from server once the url was received by upgrade_request + hide("#keep_container"); + hide("#upgrade_button"); + var download_request = new XMLHttpRequest(); + download_request.open("GET", data.sysupgrade_url); + download_request.responseType = "arraybuffer"; + + download_request.onload = function() { + if (this.status === 200) { + var blob = new Blob([download_request.response], { + type: "application/octet-stream" + }); + upload_image(blob) + } + }; + set_status("info", _("Downloading firmware to web browser memory"), true); + download_request.send(); +} + +function server_request() { + fetch(data.url + "/api/build?v=" + Date.now(), { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(request_dict) + }) + .then(response => { + switch (response.status) { + case 200: + response.json() + .then(response => { + upgrade_request_callback(response) + }); + break; + case 202: + set_status("info", "Processing request", true); + setTimeout(function() { + server_request() + }, 5000) + break; + case 400: // bad request + case 422: // bad package + case 500: // build failed + console.log('error (' + response.status + ')'); + response.json() + .then(response => { + if (response.buildlog) { + data.buildlog_url = data.url + '/' + response.bin_dir + '/buildlog.txt'; + } + set_status("danger", response.message); + }); + break; + } + }); +} + +request_dict = {} +document.onload = setup() diff --git a/luci-base/po/oc/base.po b/luci-base/po/oc/base.po new file mode 100755 index 000000000..28f4b510f --- /dev/null +++ b/luci-base/po/oc/base.po @@ -0,0 +1,7620 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2020-10-19 09:37+0000\n" +"Last-Translator: Quentin PAGÈS \n" +"Language-Team: Occitan \n" +"Language: oc\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.0.4\n" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:929 +msgid "%.1f dB" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:114 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:261 +msgid "%d Bit" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3689 +msgid "%d invalid field(s)" +msgstr "%d camp(s) invalid(s)" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:35 +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:294 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:403 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:270 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:307 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:325 +msgid "(%d minute window, %d second interval)" +msgstr "(fenèstra de %d minuta,interval de %d segonda)" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:118 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:124 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:258 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:282 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:88 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:91 +msgid "(empty)" +msgstr "(void)" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:351 +#: modules/luci-compat/luasrc/view/cbi/network_netinfo.htm:23 +#: modules/luci-compat/luasrc/view/cbi/network_netlist.htm:58 +msgid "(no interfaces attached)" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/ucisection.htm:48 +msgid "-- Additional Field --" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/cbi.js:275 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3372 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3704 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:767 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:1005 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:1974 +#: modules/luci-compat/luasrc/view/cbi/header.htm:8 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:88 +msgid "-- Please choose --" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/cbi.js:276 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:1006 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:1975 +#: modules/luci-compat/luasrc/view/cbi/header.htm:9 +msgid "-- custom --" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:270 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:379 +msgid "-- match by label --" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:256 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:362 +msgid "-- match by uuid --" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:27 +#: modules/luci-compat/luasrc/view/cbi/network_ifacelist.htm:44 +#: modules/luci-compat/luasrc/view/cbi/network_netlist.htm:23 +msgid "-- please select --" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:54 +msgctxt "sstp log level value" +msgid "0" +msgstr "0" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:939 +msgid "0 = not using RSSI threshold, 1 = do not change driver default" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:55 +msgctxt "sstp log level value" +msgid "1" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:231 +msgid "1 Minute Load:" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:251 +msgid "15 Minute Load:" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:56 +msgctxt "sstp log level value" +msgid "2" +msgstr "2" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:57 +msgctxt "sstp log level value" +msgid "3" +msgstr "3" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:58 +msgctxt "sstp log level value" +msgid "4" +msgstr "4" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1442 +msgid "4-character hexadecimal ID" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:18 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:11 +msgid "464XLAT (CLAT)" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:241 +msgid "5 Minute Load:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1471 +msgid "6-octet identifier as a hex string - no colons" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1431 +msgid "802.11r Fast Transition" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1619 +msgid "802.11w Association SA Query maximum timeout" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1626 +msgid "802.11w Association SA Query retry timeout" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1607 +msgid "802.11w Management Frame Protection" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1619 +msgid "802.11w maximum timeout" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1626 +msgid "802.11w retry timeout" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:956 +msgid "BSSID" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:326 +msgid "DNS query port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:317 +msgid "DNS server port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:260 +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:945 +msgid "ESSID" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:475 +msgid "IPv4-Address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:42 +msgid "IPv4-Gateway" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:603 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:36 +msgid "IPv4-Netmask" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:31 +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:42 +msgid "IPv6-Gateway" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:504 +msgid "IPv6-Suffix (hex)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js:58 +msgid "LED Configuration" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js:69 +msgid "LED Name" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:431 +msgid "MAC-Address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:498 +msgid "DUID" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:335 +msgid "" +"Max. DHCP leases" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:344 +msgid "" +"Max. EDNS0 packet size" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:353 +msgid "Max. concurrent queries" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontab.js:29 +msgid "" +"
Note: you need to manually restart the cron service if the crontab file " +"was empty before editing." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2720 +msgid "A directory with the same name already exists." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2670 +msgid "A new login is required since the authentication session expired." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:909 +msgid "A43C + J43 + A43" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:910 +msgid "A43C + J43 + A43 + V43" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:922 +msgid "ADSL" +msgstr "ADSL" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:898 +msgid "ANSI T1.413" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:94 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:93 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:86 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:67 +msgid "APN" +msgstr "APN" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:197 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:352 +msgid "ARP" +msgstr "ARP" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:365 +msgid "ARP IP Targets" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:357 +msgid "ARP Interval" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:381 +msgid "ARP Validation" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:373 +msgid "ARP mode to consider a slave as being up" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:77 +msgid "ARP monitoring is not supported for the selected policy!" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:175 +msgid "ARP retry threshold" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:917 +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:938 +msgid "ATM Bridges" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:970 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:66 +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:971 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:70 +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:938 +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:977 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:62 +msgid "ATM device number" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:37 +msgid "ATU-C System Vendor ID" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:265 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:543 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:547 +msgid "Absent Interface" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:47 +msgid "Access Concentrator" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:927 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1032 +msgid "Access Point" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:360 +msgid "Actions" +msgstr "Accions" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:200 +msgid "Active IPv4-Routes" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:206 +msgid "Active IPv6-Routes" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:81 +msgid "Active Connections" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:33 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:92 +msgid "Active DHCP Leases" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:52 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:94 +msgid "Active DHCPv6 Leases" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:203 +msgid "Active-Backup policy (active-backup, 1)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:3666 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:929 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:23 +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:208 +msgid "Adaptive load balancing (balance-alb, 6)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:207 +msgid "Adaptive transmit load balancing (balance-tlb, 5)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2167 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2170 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2184 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2185 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3170 +#: modules/luci-compat/luasrc/view/cbi/nsection.htm:25 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:189 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:197 +#: modules/luci-compat/luasrc/view/cbi/tsection.htm:39 +#: modules/luci-compat/luasrc/view/cbi/tsection.htm:47 +#: modules/luci-compat/luasrc/view/cbi/ucisection.htm:54 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:827 +msgid "Add" +msgstr "Ajustar" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:942 +msgid "Add ATM Bridge" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:92 +msgid "Add IPv4 address…" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:207 +msgid "Add IPv6 address…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js:65 +msgid "Add LED action" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:219 +msgid "Add VLAN" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:15 +msgid "Add instance" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:146 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:152 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:247 +msgid "Add key" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:248 +msgid "Add local domain suffix to names served from hosts files" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:311 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:757 +msgid "Add new interface..." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:125 +msgid "Add peer" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:200 +msgid "Additional Hosts files" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:255 +msgid "Additional servers file" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:34 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:35 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:36 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:37 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:38 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:39 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:40 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:41 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:42 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:43 +msgid "Address" +msgstr "Adreça" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:151 +msgid "Address to access local relay bridge" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:285 +msgid "Addresses" +msgstr "Adreças" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:3 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:15 +msgid "Administration" +msgstr "Administracion" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:164 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:324 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:553 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:968 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:25 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:866 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:924 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:241 +msgid "Advanced Settings" +msgstr "Paramètres avançats" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:28 +msgid "Aggregate Transmit Power (ACTATP)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:258 +msgid "Aggregation Selection Logic" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:261 +msgid "Aggregator: All slaves down or has no slaves (stable, 0)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:263 +msgid "" +"Aggregator: Chosen by the largest number of ports + slave added/removed or " +"state changes (count, 2)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:262 +msgid "Aggregator: Slave added/removed or state changes (bandwidth, 1)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:171 +msgid "Alert" +msgstr "Alèrta" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2871 +#: modules/luci-compat/luasrc/model/network.lua:1417 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:61 +msgid "Alias Interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:145 +msgid "Alias of \"%s\"" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:263 +msgid "All Servers" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:209 +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:208 +msgid "Allocate IP sequentially" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:25 +msgid "Allow SSH password authentication" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1112 +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1016 +msgid "Allow all except listed" +msgstr "" + +#: modules/luci-compat/root/usr/share/rpcd/acl.d/luci-compat.json:3 +msgid "Allow full UCI access for legacy applications" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:892 +msgid "Allow legacy 802.11b rates" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1015 +msgid "Allow listed only" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:300 +msgid "Allow localhost" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:157 +msgid "Allow rebooting the device" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:36 +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:31 +msgid "Allow root logins with password" +msgstr "" + +#: modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json:3 +msgid "Allow system feature probing" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:31 +msgid "Allow the root user to login with password" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:301 +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:148 +msgid "Allowed IPs" +msgstr "IP autorizadas" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:654 +msgid "Always announce default router" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/none.js:5 +msgid "Always off (kernel: none)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/default-on.js:6 +msgid "Always on (kernel: default-on)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:907 +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:603 +msgid "An error occurred while saving the form:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:890 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:20 +msgid "Annex" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:891 +msgid "Annex A + L + M (all)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:899 +msgid "Annex A G.992.1" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:900 +msgid "Annex A G.992.2" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:901 +msgid "Annex A G.992.3" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:902 +msgid "Annex A G.992.5" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:892 +msgid "Annex B (all)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:895 +msgid "Annex B G.992.1" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:896 +msgid "Annex B G.992.3" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:897 +msgid "Annex B G.992.5" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:893 +msgid "Annex J (all)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:903 +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:894 +msgid "Annex M (all)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:904 +msgid "Annex M G.992.3" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:905 +msgid "Annex M G.992.5" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:654 +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:659 +msgid "Announced DNS domains" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:658 +msgid "Announced DNS servers" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1596 +msgid "Anonymous Identity" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:162 +msgid "Anonymous Mount" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:158 +msgid "Anonymous Swap" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:84 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:174 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:195 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:60 +msgid "Any zone" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:119 +msgid "Apply backup?" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4276 +msgid "Apply request failed with status %h" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2181 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4142 +msgid "Apply unchecked" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4215 +msgid "Applying configuration changes… %ds" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:56 +msgid "Architecture" +msgstr "Arquitectura" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:184 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:27 +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:189 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:31 +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2078 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:245 +msgid "Associated Stations" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:46 +msgid "Associations" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:154 +msgid "Attempt to enable configured mount points for attached devices" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:104 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:64 +msgid "Auth Group" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1535 +msgid "Authentication" +msgstr "Autentificacion" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:96 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:70 +msgid "Authentication Type" +msgstr "Tipe d’autentificacion" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:172 +msgid "Authoritative" +msgstr "" + +#: modules/luci-base/luasrc/view/sysauth.htm:17 +msgid "Authorization Required" +msgstr "" + +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:196 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:197 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:241 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:244 +msgid "Auto Refresh" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:106 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:18 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:24 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:98 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:50 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:94 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:81 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:55 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:68 +msgid "Automatic" +msgstr "Automatic" + +#: modules/luci-compat/luasrc/model/network/proto_hnet.lua:7 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:7 +msgid "Automatic Homenet (HNCP)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:174 +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:170 +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:166 +msgid "Automatically mount swap on hotplug" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:170 +msgid "Automount Filesystem" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:166 +msgid "Automount Swap" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:193 +msgid "Available" +msgstr "Disponible" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:268 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:278 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:329 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:339 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:349 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:234 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:244 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:254 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:263 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:273 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:291 +msgid "Average:" +msgstr "Mejana :" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:911 +msgid "B43 + B43C" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:912 +msgid "B43 + B43C + V43" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:48 +msgid "BR / DMR / AFTR" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:158 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:182 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1665 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:44 +msgid "BSSID" +msgstr "BSSID" + +#: modules/luci-compat/luasrc/view/cbi/footer.htm:14 +#: modules/luci-compat/luasrc/view/cbi/simpleform.htm:48 +msgid "Back to Overview" +msgstr "" + +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:48 +msgid "Back to configuration" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:363 +msgid "Backup" +msgstr "Salvagarda" + +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:114 +msgid "Backup / Flash Firmware" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:323 +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:12 +msgid "Backup file list" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/wireless_modefreq.htm:158 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:451 +msgid "Band" +msgstr "Grop" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:910 +msgid "Beacon Interval" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:324 +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:46 +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:395 +msgid "" +"Bind dynamically to interfaces rather than wildcard address (recommended as " +"linux default)" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:52 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:57 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:57 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:62 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:48 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:55 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:57 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:52 +msgid "Bind interface" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:52 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:57 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:57 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:62 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:48 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:55 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:57 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:52 +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:129 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:188 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:63 +msgid "Bitrate" +msgstr "Debit" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:266 +msgid "Bogus NX Domain Override" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:199 +msgid "Bonding Policy" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2877 +#: modules/luci-compat/luasrc/model/network.lua:1421 +msgid "Bridge" +msgstr "Pont" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:416 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:730 +msgid "Bridge interfaces" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:978 +msgid "Bridge unit number" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:412 +msgid "Bring up on boot" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:205 +msgid "Broadcast policy (broadcast, 3)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2810 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3799 +msgid "Browse…" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:37 +msgid "Buffered" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:138 +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:7 +msgid "CLAT configuration failed" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:72 +msgid "CPU usage (%)" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:41 +msgid "Cached" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_modemmanager.lua:53 +#: modules/luci-compat/luasrc/model/network/proto_qmi.lua:53 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:21 +msgid "Call failed" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2903 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3808 +#: modules/luci-compat/luasrc/view/cbi/delegator.htm:14 +#: modules/luci-compat/luasrc/view/cbi/simpleform.htm:52 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:187 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:763 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1952 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:128 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:272 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:184 +msgid "Cancel" +msgstr "Anullar" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:17 +msgid "Category" +msgstr "Categoria" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1519 +msgid "Certificate constraint (Domain)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1516 +msgid "Certificate constraint (SAN)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1513 +msgid "Certificate constraint (Subject)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1522 +msgid "Certificate constraint (Wildcard)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1513 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1571 +msgid "" +"Certificate constraint substring - e.g. /CN=wifi.mycompany.com
See " +"`logread -f` during handshake for actual values" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1519 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1577 +msgid "" +"Certificate constraint(s) against DNS SAN values (if available)
or " +"Subject CN (exact match)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1522 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1580 +msgid "" +"Certificate constraint(s) against DNS SAN values (if available)
or " +"Subject CN (suffix match)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1516 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1574 +msgid "" +"Certificate constraint(s) via Subject Alternate Name values
(supported " +"attributes: EMAIL, DNS, URI) - e.g. DNS:wifi.mycompany.com" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:53 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:56 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:200 +msgid "Chain" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4028 +msgid "Changes" +msgstr "Diferéncias" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4311 +msgid "Changes have been reverted." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:46 +msgid "Changes the administrator password for accessing the device" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/wireless_modefreq.htm:162 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:128 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:184 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:460 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1663 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:62 +msgid "Channel" +msgstr "Canal" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:174 +msgid "Check filesystems before mount" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1914 +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:110 +msgid "Checking archive…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:193 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:195 +msgid "Checking image…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:399 +msgid "Choose mtdblock" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:491 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1942 +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the custom field to define a new zone and attach the " +"interface to it." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:959 +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the custom field to define a new network." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1148 +msgid "Cipher" +msgstr "Cipher" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:91 +msgid "Cisco UDP encapsulation" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:363 +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:396 +msgid "" +"Click \"Save mtdblock\" to download specified mtdblock file. (NOTE: THIS " +"FEATURE IS FOR PROFESSIONALS! )" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:3665 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:928 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1033 +msgid "Client" +msgstr "Client" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:52 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:47 +msgid "Client ID to send when requesting DHCP" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:148 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:154 +msgid "Close" +msgstr "Tampar" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:157 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:141 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:128 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:106 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:115 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:138 +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" + +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:49 +msgid "Close list..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:42 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:61 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2076 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:389 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:317 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:320 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:204 +msgid "Collecting data..." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:71 +msgid "Command" +msgstr "Comanda" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:401 +msgid "Command OK" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:33 +msgid "Command failed" +msgstr "La comanda a fracassat" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:72 +msgid "Comment" +msgstr "Comentari" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1634 +msgid "" +"Complicates key reinstallation attacks on the client side by disabling " +"retransmission of EAPOL-Key frames that are used to install keys. This " +"workaround might cause interoperability issues and reduced robustness of key " +"negotiation especially in environments with heavy traffic load." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:91 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:93 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:98 +msgid "Compute outgoing checksum (optional)." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4028 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:426 +msgid "Configuration" +msgstr "Configuracion" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4190 +msgid "Configuration changes applied." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4128 +msgid "Configuration changes have been rolled back!" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:63 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:21 +msgid "Configuration failed" +msgstr "Fracàs de la configuracion" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:175 +msgid "Confirm disconnect" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:55 +msgid "Confirmation" +msgstr "Confirmacion" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:46 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:51 +msgid "Connected" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:9 +#: modules/luci-compat/luasrc/model/network.lua:27 +msgid "Connection attempt failed" +msgstr "Ensag de connexion pas capitat" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:40 +msgid "Connection attempt failed." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:411 +msgid "Connection lost" +msgstr "Connexion perduda" + +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:117 +msgid "Connections" +msgstr "Connexions" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:377 +msgid "Consider the slave up when all ARP IP targets are reachable (all, 1)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:376 +msgid "Consider the slave up when any ARP IP target is reachable (any, 0)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontab.js:18 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:340 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:55 +msgid "Contents have been saved." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:742 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:132 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:264 +msgid "Continue" +msgstr "Contunhar" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4164 +msgid "" +"Could not regain access to the device after applying the configuration " +"changes. You might need to reconnect if you modified network related " +"settings such as the IP address or wireless security credentials." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:189 +msgid "Country" +msgstr "País" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:889 +msgid "Country Code" +msgstr "Còde de país" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:491 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1942 +msgid "Create / Assign firewall-zone" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:798 +msgid "Create interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:416 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:730 +msgid "Creates a bridge over specified interface(s)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:170 +msgid "Critical" +msgstr "Critic" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:174 +msgid "Cron Log Level" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:533 +msgid "Current power" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:568 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:570 +#: modules/luci-compat/luasrc/view/cbi/network_ifacelist.htm:51 +#: modules/luci-compat/luasrc/view/cbi/network_ifacelist.htm:53 +#: modules/luci-compat/luasrc/view/cbi/network_ifacelist.htm:82 +#: modules/luci-compat/luasrc/view/cbi/network_ifacelist.htm:83 +msgid "Custom Interface" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:36 +msgid "Custom delegated IPv6-prefix" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:382 +msgid "" +"Custom files (certificates, scripts) may remain on the system. To prevent " +"this, perform a factory-reset first." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/timer.js:6 +msgid "Custom flash interval (kernel: timer)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js:59 +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1353 +msgid "DAE-Client" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1358 +msgid "DAE-Port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1363 +msgid "DAE-Secret" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:327 +msgid "DHCP Server" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:155 +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:50 +msgid "DHCP and DNS" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:1982 +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:16 +#: modules/luci-compat/luasrc/model/network.lua:969 +msgid "DHCP client" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:619 +msgid "DHCP-Options" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_dhcpv6.lua:7 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:7 +msgid "DHCPv6 client" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:646 +msgid "DHCPv6-Mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:631 +msgid "DHCPv6-Service" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:45 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:46 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:47 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:48 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:49 +msgid "DNS" +msgstr "DNS" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:277 +msgid "DNS forwardings" +msgstr "" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:37 +msgid "DNS-Label / FQDN" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:228 +msgid "DNSSEC" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:232 +msgid "DNSSEC check unsigned" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:99 +msgid "DPD Idle Timeout" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:41 +msgid "DS-Lite AFTR address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:887 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:45 +msgid "DSL" +msgstr "DSL" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:14 +msgid "DSL Status" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:920 +msgid "DSL line mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1088 +msgid "DTIM Interval" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:57 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:58 +msgid "DUID" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:22 +msgid "Data Rate" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:165 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:176 +msgid "Debug" +msgstr "Desbugatge" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1328 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1343 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1358 +msgid "Default %d" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:107 +msgid "Default Route" +msgstr "Rota per defaut" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:48 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:85 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:65 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:49 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:67 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:80 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:108 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:150 +msgid "Default gateway" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:646 +msgid "Default is stateless + stateful" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/default-on.js:11 +msgid "Default state" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:619 +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2237 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2662 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2666 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3154 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2872 +#: modules/luci-compat/luasrc/view/cbi/nsection.htm:11 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:162 +#: modules/luci-compat/luasrc/view/cbi/tsection.htm:16 +msgid "Delete" +msgstr "Suprimir" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:180 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:186 +msgid "Delete key" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2769 +msgid "Delete request failed: %s" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:847 +msgid "Delete this network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1088 +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:340 +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:134 +msgid "Description" +msgstr "Descripcion" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2868 +msgid "Deselect" +msgstr "Deseleccionar" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:220 +msgid "Design" +msgstr "Concepcion" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:384 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:70 +msgid "Destination" +msgstr "Destinacion" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:48 +msgid "Destination port" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:59 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:165 +msgid "Destination zone" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:67 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:191 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:43 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:45 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:80 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:55 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/netdev.js:12 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:247 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:280 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:356 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:392 +msgid "Device" +msgstr "Periferic" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:861 +msgid "Device Configuration" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:132 +msgid "Device is not active" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:224 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:599 +msgid "Device is restarting…" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:45 +msgid "Device not managed by ModemManager." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4163 +msgid "Device unreachable!" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:53 +msgid "Device unreachable! Still waiting for device..." +msgstr "" + +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:88 +msgid "Diagnostics" +msgstr "Diagnostics" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:101 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:93 +msgid "Dial number" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2665 +msgid "Directory" +msgstr "Direccion" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:839 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:879 +msgid "Disable" +msgstr "Desactivar" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:579 +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:174 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:373 +msgid "Disable DNS lookups" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:93 +msgid "Disable Encryption" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1098 +msgid "Disable Inactivity Polling" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:837 +msgid "Disable this network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1608 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:66 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:107 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:99 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:51 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:95 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:82 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:56 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:69 +msgid "Disabled" +msgstr "Desactivat" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1112 +msgid "Disassociate On Low Acknowledgement" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:294 +msgid "Discard upstream RFC1918 responses" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:197 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:665 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:231 +msgid "Disconnect" +msgstr "Se desconnectar" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:64 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:22 +msgid "Disconnection attempt failed" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:48 +msgid "Disconnection attempt failed." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:606 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2861 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3309 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4045 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4134 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1688 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:330 +msgid "Dismiss" +msgstr "Far desaparéisser" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:895 +msgid "Distance Optimization" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:895 +msgid "Distance to farthest network member in meters." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:155 +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:252 +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:79 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:84 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:81 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:86 +msgid "Do not create host route to peer (optional)." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:219 +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:214 +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:25 +msgid "Do not send a hostname" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2755 +msgid "Do you really want to delete \"%s\" ?" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:181 +msgid "Do you really want to delete the following SSH key?" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:94 +msgid "Do you really want to erase all settings?" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2753 +msgid "Do you really want to recursively delete the directory \"%s\" ?" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:168 +msgid "Domain required" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:307 +msgid "Domain whitelist" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:76 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:81 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:67 +msgid "Don't Fragment" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:169 +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:152 +msgid "Down" +msgstr "Bas" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:402 +msgid "Down Delay" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:366 +msgid "Download backup" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:404 +msgid "Download mtdblock" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:925 +msgid "Downstream SNR offset" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2620 +msgid "Drag to reorder" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:341 +msgid "Drop Duplicate Frames" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:12 +msgid "Dropbear Instance" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:10 +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:14 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:11 +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:595 +msgid "Dynamic DHCP" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:60 +msgid "Dynamic tunnel" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:595 +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:67 +msgid "EA-bits length" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1491 +msgid "EAP-Method" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2640 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2643 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3017 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:154 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:160 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:339 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:844 +msgid "Edit" +msgstr "Editar" + +#: modules/luci-compat/luasrc/view/cbi/error.htm:13 +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:842 +msgid "Edit this network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:793 +msgid "Edit wireless network" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:172 +msgid "Emergency" +msgstr "Urgéncia" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:839 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:879 +msgid "Enable" +msgstr "Activar" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:462 +msgid "" +"Enable IGMP " +"snooping" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:460 +msgid "Enable STP" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:174 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:367 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:373 +msgid "Enable DNS lookups" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:292 +msgid "Enable Dynamic Shuffling Of Flows" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:60 +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:89 +msgid "Enable IPv6 negotiation" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:49 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:93 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:80 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:54 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:67 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:93 +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:192 +msgid "Enable Jumbo Frame passthrough" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:240 +msgid "Enable NTP client" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:96 +msgid "Enable Single DES" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:368 +msgid "Enable TFTP server" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:184 +msgid "Enable VLAN functionality" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1638 +msgid "Enable WPS pushbutton, requires WPA(2)-PSK/WPA3-SAE" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1634 +msgid "Enable key reinstallation (KRACK) countermeasures" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:187 +msgid "Enable learning and aging" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:198 +msgid "Enable mirroring of incoming packets" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:199 +msgid "Enable mirroring of outgoing packets" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:882 +msgid "" +"Enable packet steering across all CPUs. May help or hinder network speed." +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:80 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:75 +msgid "Enable rx checksum" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:76 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:81 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:67 +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:837 +msgid "Enable this network" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:84 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:79 +msgid "Enable tx checksum" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:243 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:352 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:66 +msgid "Enabled" +msgstr "Activat" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:462 +msgid "Enables IGMP snooping on this bridge" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1431 +msgid "" +"Enables fast roaming among access points that belong to the same Mobility " +"Domain" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:460 +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:59 +msgid "Encapsulation limit" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:915 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:973 +msgid "Encapsulation mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:159 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:183 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1117 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1666 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:45 +msgid "Encryption" +msgstr "Chiframent" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:161 +msgid "Endpoint Host" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:165 +msgid "Endpoint Port" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/dropdown.htm:16 +msgid "Enter custom value" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/dropdown.htm:16 +msgid "Enter custom values" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:97 +msgid "Erasing..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:102 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:103 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:104 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:105 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:106 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:169 +msgid "Error" +msgstr "Error" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:30 +msgid "Errored seconds (ES)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2889 +#: modules/luci-compat/luasrc/model/network.lua:1433 +msgid "Ethernet Adapter" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2880 +#: modules/luci-compat/luasrc/model/network.lua:1423 +msgid "Ethernet Switch" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:270 +msgid "Every 30 seconds (slow, 0)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:271 +msgid "Every second (fast, 1)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:406 +msgid "Exclude interfaces" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:247 +msgid "Expand hosts" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:198 +msgid "Expecting a hexadecimal assignment hint" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:64 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:73 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:79 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:107 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:121 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:125 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:129 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:132 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:136 +msgid "Expecting: %s" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:48 +msgid "Expecting: non-empty value" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:50 +msgid "Expires" +msgstr "Expira" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:591 +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:19 +msgid "External" +msgstr "Extèrne" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1482 +msgid "External R0 Key Holder List" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1486 +msgid "External R1 Key Holder List" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:146 +msgid "External system log server" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:151 +msgid "External system log server port" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:156 +msgid "External system log server protocol" +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:79 +msgid "Extra SSH command options" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:83 +msgid "Extra pppd options" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:81 +msgid "Extra sstpc options" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1456 +msgid "FT over DS" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1457 +msgid "FT over the Air" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1454 +msgid "FT protocol" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:87 +msgid "Failed to change the system password." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4122 +msgid "Failed to confirm apply within %ds, waiting for rollback…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:37 +msgid "Failed to execute \"/etc/init.d/%s %s\" action: %s" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2673 +msgid "File" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2620 +msgid "File not accessible" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2811 +msgid "Filename" +msgstr "Nom de fichièr" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:381 +msgid "Filename of the boot image advertised to clients" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:191 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:314 +msgid "Filesystem" +msgstr "Sistèma de fichièrs" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:213 +msgid "Filter private" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:218 +msgid "Filter useless" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:388 +msgid "Filtering for all slaves, no validation" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:389 +msgid "Filtering for all slaves, validation only for active slave" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:390 +msgid "Filtering for all slaves, validation only for backup slaves" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:65 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:23 +msgid "Finalizing failed" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:150 +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:820 +msgid "Find and join network" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/delegator.htm:9 +msgid "Finish" +msgstr "Acabar" + +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:15 +msgid "Firewall" +msgstr "Parafuòc" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:102 +msgid "Firewall Mark" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:326 +msgid "Firewall Settings" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:297 +msgid "Firewall Status" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:932 +msgid "Firmware File" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:57 +msgid "Firmware Version" +msgstr "Version del microcòdi" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:327 +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:283 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:421 +msgid "Flash image..." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:279 +msgid "Flash image?" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:411 +msgid "Flash new firmware image" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:356 +msgid "Flash operations" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:288 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:290 +msgid "Flashing…" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:598 +msgid "Force" +msgstr "Fòrça" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:907 +msgid "Force 40MHz mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1158 +msgid "Force CCMP (AES)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:598 +msgid "Force DHCP on this network even if another server is detected." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1159 +msgid "Force TKIP" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1160 +msgid "Force TKIP and CCMP (AES)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:864 +msgid "Force link" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:255 +msgid "Force upgrade" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:90 +msgid "Force use of NAT-T" +msgstr "" + +#: modules/luci-base/luasrc/view/csrftoken.htm:8 +msgid "Form token mismatch" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:164 +msgid "Forward DHCP traffic" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:29 +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:161 +msgid "Forward broadcast traffic" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:934 +msgid "Forward mesh peer traffic" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:980 +msgid "Forwarding mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:899 +msgid "Fragmentation Threshold" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:115 +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.com." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:128 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:184 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:62 +msgid "GHz" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:91 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:77 +msgid "GPRS only" +msgstr "solament GPRS" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:10 +msgid "GRE tunnel over IPv4" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:10 +msgid "GRE tunnel over IPv6" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:10 +msgid "GRETAP tunnel over IPv4" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:10 +msgid "GRETAP tunnel over IPv6" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:44 +msgid "Gateway" +msgstr "Palanca" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:36 +msgid "Gateway Ports" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:11 +#: modules/luci-compat/luasrc/model/network.lua:29 +msgid "Gateway address is invalid" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:124 +msgid "Gateway metric" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:161 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:323 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:24 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:240 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:108 +msgid "General Settings" +msgstr "Paramètres generals" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:552 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:967 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:865 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:921 +msgid "General Setup" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:150 +msgid "Generate Config" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:66 +msgid "Generate Key" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1460 +msgid "Generate PMK locally" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:368 +msgid "Generate archive" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:79 +msgid "Given password confirmation did not match, password not changed!" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:146 +msgid "Global Settings" +msgstr "Configuracion generala" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:875 +msgid "Global network options" +msgstr "" + +#: themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm:57 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:215 +#: themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm:58 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:82 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:284 +msgid "Go to password configuration..." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2562 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3336 +#: modules/luci-compat/luasrc/view/cbi/full_valueheader.htm:4 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:58 +msgid "Go to relevant configuration page" +msgstr "" + +#: modules/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json:33 +msgid "Grant access to DHCP configuration" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:102 +msgid "Grant access to DHCP status display" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:111 +msgid "Grant access to DSL status display" +msgstr "" + +#: protocols/luci-proto-openconnect/root/usr/share/rpcd/acl.d/luci-openconnect.json:3 +msgid "Grant access to LuCI OpenConnect procedures" +msgstr "" + +#: protocols/luci-proto-wireguard/root/usr/share/rpcd/acl.d/luci-wireguard.json:3 +msgid "Grant access to LuCI Wireguard procedures" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:19 +msgid "Grant access to SSH configuration" +msgstr "" + +#: modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json:12 +msgid "Grant access to basic LuCI procedures" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:64 +msgid "Grant access to crontab configuration" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:60 +msgid "Grant access to firewall status" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:116 +msgid "Grant access to flash operations" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:86 +msgid "Grant access to main status display" +msgstr "" + +#: protocols/luci-proto-modemmanager/root/usr/share/rpcd/acl.d/luci-proto-modemmanager.json:3 +msgid "Grant access to mmcli" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:84 +msgid "Grant access to mount configuration" +msgstr "" + +#: modules/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json:3 +msgid "Grant access to network configuration" +msgstr "" + +#: modules/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json:46 +msgid "Grant access to network diagnostic tools" +msgstr "" + +#: modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json:36 +msgid "Grant access to network status information" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:13 +msgid "Grant access to process status" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:3 +msgid "Grant access to realtime statistics" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:42 +msgid "Grant access to startup configuration" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:3 +msgid "Grant access to system configuration" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:30 +msgid "Grant access to system logs" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:47 +msgid "Grant access to the system route status" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:120 +msgid "Grant access to wireless status display" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:66 +msgid "Group Password" +msgstr "Senhal del grop" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:22 +msgid "Guest" +msgstr "Convidat" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:81 +msgid "HE.net password" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:73 +msgid "HE.net username" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:46 +msgid "Hang Up" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:34 +msgid "Header Error Code Errors (HEC)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/heartbeat.js:5 +msgid "Heartbeat interval (kernel: heartbeat)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:100 +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1066 +msgid "Hide ESSID" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:264 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:303 +msgid "Hide empty chains" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:55 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2070 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:56 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:140 +msgid "Host" +msgstr "Òste" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js:22 +msgid "Host entries" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:171 +msgid "Host expiry timeout" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:31 +msgid "Host-IP or Network" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:102 +msgid "Host-Uniq tag content" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:36 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:419 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js:27 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:54 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:29 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:121 +msgid "Hostname" +msgstr "Nom d'òste" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:22 +msgid "Hostname to send when requesting DHCP" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js:20 +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:63 +msgid "Hostnames" +msgstr "Noms d'òstes" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:24 +msgid "Hybrid" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:53 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:48 +msgid "ID used to uniquely identify the VXLAN" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:206 +msgid "IEEE 802.3ad Dynamic link aggregation (802.3ad, 4)" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:75 +msgid "IKE DH Group" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:83 +msgid "IP Addresses" +msgstr "" + +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:80 +msgid "IP Protocol" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:114 +msgid "IP Type" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js:31 +msgid "IP address" +msgstr "Adreça IP" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:10 +#: modules/luci-compat/luasrc/model/network.lua:28 +msgid "IP address is invalid" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:13 +#: modules/luci-compat/luasrc/model/network.lua:31 +msgid "IP address is missing" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:79 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:102 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:85 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:86 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:87 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:88 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:89 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:82 +msgid "IPv4" +msgstr "IPv4" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:316 +msgid "IPv4 Firewall" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:29 +msgid "IPv4 Upstream" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:178 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:162 +msgid "IPv4 address" +msgstr "Adreça IPv4" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:33 +msgid "IPv4 assignment length" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:181 +msgid "IPv4 broadcast" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:180 +msgid "IPv4 gateway" +msgstr "Palanca IPv4" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:179 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:168 +msgid "IPv4 netmask" +msgstr "Masqueta ret IPv4" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:291 +msgid "IPv4 network in address/netmask notation" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:116 +msgid "IPv4 only" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:52 +msgid "IPv4 prefix" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:61 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:55 +msgid "IPv4 prefix length" +msgstr "" + +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:83 +msgid "IPv4+IPv6" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:37 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:30 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:154 +msgid "IPv4-Address" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:164 +msgid "IPv4-Gateway" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ipip.lua:9 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:10 +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:115 +msgid "IPv4/IPv6 (both - defaults to IPv4)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:80 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:103 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:90 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:91 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:92 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:93 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:94 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:95 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:96 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:97 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:98 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:99 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:84 +msgid "IPv6" +msgstr "IPv6" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:319 +msgid "IPv6 Firewall" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:203 +msgid "IPv6 Neighbours" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:554 +msgid "IPv6 Settings" +msgstr "Paramètres IPv6" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:879 +msgid "IPv6 ULA-Prefix" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:29 +msgid "IPv6 Upstream" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:205 +msgid "IPv6 address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:189 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:31 +msgid "IPv6 assignment hint" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:184 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:27 +msgid "IPv6 assignment length" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:210 +msgid "IPv6 gateway" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:296 +msgid "IPv6 network in address/netmask notation" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:117 +msgid "IPv6 only" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:53 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:59 +msgid "IPv6 prefix" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:57 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:63 +msgid "IPv6 prefix length" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:214 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:57 +msgid "IPv6 routed prefix" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:218 +msgid "IPv6 suffix" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:51 +msgid "IPv6 support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:56 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:57 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:172 +msgid "IPv6-Address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:100 +msgid "IPv6-PD" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_6x4.lua:13 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:10 +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_6x4.lua:17 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:9 +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_6x4.lua:15 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:9 +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1593 +msgid "Identity" +msgstr "Identitat" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:96 +msgid "If checked, 1DES is enabled" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:51 +msgid "If checked, adds \"+ipv6\" to the pppd options" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:93 +msgid "If checked, encryption is disabled" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:254 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:360 +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:267 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:376 +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:37 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:116 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:48 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:85 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:65 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:49 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:33 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:67 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:80 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:108 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:150 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:64 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:56 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:100 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:87 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:61 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:74 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:97 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:61 +msgid "If unchecked, no default route is configured" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:40 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:124 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:39 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:116 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:68 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:59 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:103 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:90 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:64 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:77 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:100 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:69 +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:339 +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:197 +msgid "Ignore /etc/hosts" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:579 +msgid "Ignore interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:185 +msgid "Ignore resolve file" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:419 +msgid "Image" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:67 +msgid "In" +msgstr "" + +#: modules/luci-base/luasrc/view/csrftoken.htm:13 +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:157 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:141 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:128 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:106 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:115 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:138 +msgid "Inactivity timeout" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:265 +msgid "Inbound:" +msgstr "Dintrant :" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:90 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:95 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:97 +msgid "Incoming checksum" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:82 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:87 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:84 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:89 +msgid "Incoming key" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Incoming serialization" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:166 +msgid "Info" +msgstr "Info" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:101 +msgid "Information" +msgstr "Informacion" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:67 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:25 +msgid "Initialization failure" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:77 +msgid "Initscript" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:111 +msgid "Initscripts" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1577 +msgid "Inner certificate constraint (Domain)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1574 +msgid "Inner certificate constraint (SAN)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1571 +msgid "Inner certificate constraint (Subject)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1580 +msgid "Inner certificate constraint (Wildcard)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:268 +msgid "Install protocol extensions..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1938 +msgid "" +"Instead of joining any network with a matching SSID, only connect to the " +"BSSID %h." +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/map.htm:43 +msgid "Insufficient permissions to read UCI configuration." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:464 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:471 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:735 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:739 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:27 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:156 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:174 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:17 +msgid "Interface" +msgstr "Interfàcia" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:62 +msgid "Interface %q device auto-migrated from %q to %q." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:917 +msgid "Interface Configuration" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:110 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:151 +msgid "Interface has %d pending changes" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:92 +msgid "Interface is disabled" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:64 +msgid "Interface is marked for deletion" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:209 +msgid "Interface is reconnecting..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:193 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:203 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:209 +msgid "Interface is shutting down..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:253 +msgid "Interface is starting..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:256 +msgid "Interface is stopping..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1079 +msgid "Interface name" +msgstr "Nom de l’interfàcia" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:122 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:272 +msgid "Interface not present or not connected yet." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:308 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:335 +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:38 +msgid "Interfaces" +msgstr "Interfàcias" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:20 +msgid "Internal" +msgstr "Intèrne" + +#: modules/luci-base/luasrc/view/error500.htm:8 +msgid "Internal Server Error" +msgstr "Error intèrna de servidor" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:283 +msgid "Interval For Sending Learning Packets" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:192 +#: modules/luci-compat/luasrc/view/cbi/tsection.htm:42 +msgid "Invalid" +msgstr "Invalid" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:19 +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:22 +msgid "Invalid Base64 key string" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:285 +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:294 +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:403 +msgid "Invalid argument" +msgstr "Argument invalid" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:46 +msgid "" +"Invalid bearer list. Possibly too many bearers created. This protocol " +"supports one and only one bearer." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:402 +msgid "Invalid command" +msgstr "Comanda invalida" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:106 +msgid "Invalid hexadecimal value" +msgstr "" + +#: modules/luci-base/luasrc/view/sysauth.htm:12 +msgid "Invalid username and/or password! Please try again." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:71 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:76 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:76 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:81 +msgid "Invalid value" +msgstr "La valor es pas valida" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1075 +msgid "Isolate Clients" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:231 +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" + +#: themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm:64 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:222 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:72 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:291 +msgid "JavaScript required!" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1746 +msgid "Join Network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1680 +msgid "Join Network: Wireless Scan" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1946 +msgid "Joining Network: %q" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:223 +msgid "Keep settings and retain the current configuration" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/dmesg.js:20 +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:51 +msgid "Kernel Log" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:58 +msgid "Kernel Version" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1369 +msgid "Key" +msgstr "Clau" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1397 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1398 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1399 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1400 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1412 +msgid "Key #%d" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:82 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:87 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:84 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:89 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:86 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:91 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:88 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:93 +msgid "Key for outgoing packets (optinal)." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 +msgid "Kill" +msgstr "Tuar" + +#: modules/luci-compat/luasrc/model/network/proto_ppp.lua:21 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:10 +msgid "L2TP" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:40 +msgid "L2TP Server" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:267 +msgid "LACPDU Packets" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:131 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:115 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:102 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:76 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:89 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:112 +msgid "LCP echo failure threshold" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:144 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:128 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:115 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:89 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:102 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:125 +msgid "LCP echo interval" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:101 +msgid "LED Configuration" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:974 +msgid "LLC" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:267 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:376 +msgid "Label" +msgstr "Etiqueta" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:209 +msgid "Language" +msgstr "Lenga" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:111 +msgid "Language and Style" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:24 +msgid "Latency" +msgstr "Laténcia" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:21 +msgid "Leaf" +msgstr "Fuèlha" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:495 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:591 +msgid "Lease time" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:39 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:58 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:32 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:59 +msgid "Lease time remaining" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:181 +msgid "Leasefile" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:41 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:47 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:50 +msgid "Leave empty to autodetect" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:40 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:39 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:39 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:45 +msgid "Leave empty to use the current WAN address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4030 +msgid "Legend:" +msgstr "Legenda :" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:586 +msgid "Limit" +msgstr "Limit" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:389 +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:402 +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:25 +msgid "Line Attenuation (LATN)" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:18 +msgid "Line Mode" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:17 +msgid "Line State" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:19 +msgid "Line Uptime" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:123 +msgid "Link Aggregation (Channel Bonding)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:348 +msgid "Link Monitoring" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/netdev.js:23 +msgid "Link On" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:278 +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1482 +msgid "" +"List of R0KHs in the same Mobility Domain.
Format: MAC-address,NAS-" +"Identifier,128-bit key as hex string.
This list is used to map R0KH-ID " +"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key " +"from the R0KH that the STA used during the Initial Mobility Domain " +"Association." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1486 +msgid "" +"List of R1KHs in the same Mobility Domain.
Format: MAC-address,R1KH-ID " +"as 6 octets with colons,128-bit key as hex string.
This list is used " +"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the " +"R0KH. This is also the list of authorized R1KHs in the MD that can request " +"PMK-R1 keys." +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:82 +msgid "List of SSH key files for auth" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:308 +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:286 +msgid "List of domains to force to an IP address." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:267 +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:401 +msgid "Listen Interfaces" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:78 +msgid "Listen Port" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:17 +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:318 +msgid "Listening port for inbound DNS queries" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:87 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:54 +msgid "Load" +msgstr "Carga" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:61 +msgid "Load Average" +msgstr "Carga mejana" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2938 +msgid "Loading directory contents…" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:1948 +#: modules/luci-base/luasrc/view/view.htm:4 +#: modules/luci-mod-status/luasrc/view/admin_status/index.htm:12 +msgid "Loading view…" +msgstr "" + +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:77 +msgid "Local IP address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:12 +#: modules/luci-compat/luasrc/model/network.lua:30 +msgid "Local IP address is invalid" +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:86 +msgid "Local IP address to assign" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:46 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:46 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:44 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:40 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:39 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:39 +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:151 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:44 +msgid "Local IPv4 address" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:46 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:46 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:54 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:45 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:44 +msgid "Local IPv6 address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:388 +msgid "Local Service Only" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:115 +msgid "Local Startup" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:59 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:117 +msgid "Local Time" +msgstr "Ora locala" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:243 +msgid "Local domain" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:240 +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:244 +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:239 +msgid "Local server" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:224 +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:223 +msgid "Localise queries" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1938 +msgid "Lock to BSSID" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:164 +msgid "Log output level" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:274 +msgid "Log queries" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:109 +msgid "Logging" +msgstr "Jornalizacion" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:50 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:50 +msgid "" +"Logical network from which to select the local endpoint if local IPv6 " +"address is empty and no WAN IPv6 is available (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:50 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:55 +msgid "Logical network to which the tunnel will be added (bridged) (optional)." +msgstr "" + +#: modules/luci-base/luasrc/view/sysauth.htm:38 +msgid "Login" +msgstr "Connexion" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:81 +msgid "Logout" +msgstr "Desconnexion" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:32 +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:581 +msgid "Lowest leased address as offset from the network address." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:47 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:82 +msgid "MAC" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:251 +msgid "MAC Address For The Actor" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:38 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2069 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:56 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:31 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:139 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:155 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:173 +msgid "MAC-Address" +msgstr "Adreça MAC" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1011 +msgid "MAC-Address Filter" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:923 +msgid "MAC-Filter" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1018 +msgid "MAC-List" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:16 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:13 +msgid "MAP / LW4over6" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:62 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:7 +msgid "MAP rule is invalid" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:321 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:322 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:323 +msgid "MBit/s" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:218 +msgid "MD5" +msgstr "MD5" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:199 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:71 +msgid "MHz" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:353 +msgid "MII" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:421 +msgid "MII / ETHTOOL ioctls" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:394 +msgid "MII Interval" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:54 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:53 +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:97 +msgid "MTU" +msgstr "MTU" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:302 +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:108 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:100 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:52 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:96 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:83 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:57 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:70 +msgid "Manual" +msgstr "Manual" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:3664 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:642 +msgid "Master" +msgstr "Principal" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:23 +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1107 +msgid "Maximum allowed Listen Interval" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:336 +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:354 +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:345 +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:112 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:104 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:93 +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:586 +msgid "Maximum number of leased addresses." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:886 +msgid "Maximum transmit power" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:129 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:188 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:199 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:63 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:71 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:327 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:328 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:329 +msgid "Mbit/s" +msgstr "Mbit/s" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:35 +msgid "Medium" +msgstr "Mejan" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:24 +msgid "Memory" +msgstr "Memòria" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:73 +msgid "Memory usage (%)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:3667 +msgid "Mesh" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:156 +msgid "Mesh ID" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:931 +msgid "Mesh Id" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:404 +msgid "Method not found" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:349 +msgid "Method of link monitoring" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:418 +msgid "Method to determine link status" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:46 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:165 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:183 +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:92 +msgid "Metric" +msgstr "Metric" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:235 +msgid "Minimum Number of Links" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:202 +msgid "Mirror monitor port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:201 +msgid "Mirror source port" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_modemmanager.lua:9 +msgid "Mobile Data" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1442 +msgid "Mobility Domain" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/wireless_modefreq.htm:154 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:157 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:180 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:442 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:926 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1664 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:43 +msgid "Mode" +msgstr "Mòde" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:55 +msgid "Model" +msgstr "Modèl" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:43 +msgid "Modem bearer teardown in progress." +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:42 +msgid "" +"Modem connection in progress. Please wait. This process will timeout after 2 " +"minutes." +msgstr "" + +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:72 +msgid "Modem default" +msgstr "Modem per defaut" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:73 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:82 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:61 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:73 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:57 +msgid "Modem device" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:41 +msgid "Modem disconnection in progress. Please wait." +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:66 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:24 +msgid "Modem information query failed" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:112 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:104 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:93 +msgid "Modem init timeout" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:44 +msgid "Modem is disabled." +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:52 +msgid "ModemManager" +msgstr "ModemManager" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:3668 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1005 +msgid "Monitor" +msgstr "Monitor" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:31 +msgid "More Characters" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2504 +msgid "More…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:192 +msgid "Mount Point" +msgstr "Punt de montatge" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:144 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:228 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:88 +msgid "Mount Points" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:229 +msgid "Mount Points - Mount Entry" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:340 +msgid "Mount Points - Swap Entry" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:228 +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:154 +msgid "Mount attached devices" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:162 +msgid "Mount filesystems not specifically configured" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:331 +msgid "Mount options" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:292 +msgid "Mount point" +msgstr "Punt de montatge" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:158 +msgid "Mount swap not specifically configured" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:223 +msgid "Mounted file systems" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:152 +msgid "Move down" +msgstr "Desplaçar cap aval" + +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:151 +msgid "Move up" +msgstr "Desplaçar cap amont" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1437 +msgid "NAS ID" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:87 +msgid "NAT-T Mode" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:41 +msgid "NAT64 Prefix" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:26 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:31 +msgid "NCM" +msgstr "NCM" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:637 +msgid "NDP-Proxy" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:72 +msgid "NT Domain" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:274 +msgid "NTP server candidates" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2542 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3785 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:27 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:710 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js:67 +msgid "Name" +msgstr "Nom" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1916 +msgid "Name of the new network" +msgstr "" + +#: themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm:40 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:50 +msgid "Navigation" +msgstr "Navigacion" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:45 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:959 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2068 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:381 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:63 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:138 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:162 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:180 +msgid "Network" +msgstr "Ret" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:68 +msgid "Network Utilities" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:380 +msgid "Network boot image" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/netdev.js:7 +msgid "Network device activity (kernel: netdev)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:15 +#: modules/luci-compat/luasrc/model/network.lua:33 +msgid "Network device is not present" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:50 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:55 +msgid "Network interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:777 +msgid "New interface for \"%s\" can not be created: %s" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:713 +msgid "New interface name…" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/delegator.htm:11 +msgid "Next »" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:3643 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:296 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:345 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:108 +msgid "No" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:562 +msgid "No DHCP Server configured for this interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1310 +msgid "No Encryption" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:87 +msgid "No Host Routes" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:89 +msgid "No NAT-T" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:79 +msgid "No RX signal" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:69 +msgid "No client associated" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:406 +msgid "No data received" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2878 +msgid "No entries in this directory" +msgstr "" + +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:82 +msgid "No files found" +msgstr "Pas cap de fichièr trobat" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:79 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:84 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:81 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:86 +msgid "No host route" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:674 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:142 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:241 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:59 +msgid "No information available" +msgstr "Pas cap d'informacion disponibla" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:63 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:8 +msgid "No matching prefix delegation" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:140 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:143 +msgid "No more slaves available" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:187 +msgid "No more slaves available, can not save interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:251 +msgid "No negative cache" +msgstr "" + +#: themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm:54 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:212 +#: themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm:55 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:79 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:279 +msgid "No password set!" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:130 +msgid "No peers defined yet" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:121 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:268 +msgid "No public keys present yet." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:90 +msgid "No rules in this chain." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:384 +msgid "No validation or filtering" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:152 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:825 +msgid "No zone assigned" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:58 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:84 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:187 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:141 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:174 +msgid "Noise" +msgstr "Bruch" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:27 +msgid "Noise Margin (SNR)" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:270 +msgid "Noise:" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:35 +msgid "Non Pre-emptive CRC errors (CRC_P)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:394 +msgid "Non-wildcard" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:159 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:183 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:100 +msgid "None" +msgstr "Cap" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:177 +msgid "Normal" +msgstr "Normala" + +#: modules/luci-base/luasrc/view/error404.htm:8 +msgid "Not Found" +msgstr "Pas trobat" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:75 +msgid "Not associated" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:32 +msgid "Not connected" +msgstr "Pas connectat" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:45 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:80 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:120 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:146 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:280 +msgid "Not present" +msgstr "Pas present" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:101 +msgid "Not started on boot" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:409 +msgid "Not supported" +msgstr "Pas pres en carga" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:167 +msgid "Notice" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:127 +msgid "Nslookup" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:332 +msgid "Number of IGMP membership reports" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:362 +msgid "Number of cached DNS entries (max is 10000, 0 is no caching)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:199 +msgid "Number of parallel threads used for compression" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:309 +msgid "Number of peer notifications after failover event" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:69 +msgid "Obfuscated Group Password" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:61 +msgid "Obfuscated Password" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:105 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:97 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:49 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:93 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:80 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:54 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:67 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:93 +msgid "Obtain IPv6-Address" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/default-on.js:18 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:351 +msgid "Off" +msgstr "Desactivat" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/timer.js:15 +msgid "Off-State Delay" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/default-on.js:18 +msgid "On" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:96 +msgid "On-Link route" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/timer.js:11 +msgid "On-State Delay" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:484 +msgid "One of hostname or mac address must be specified!" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:466 +msgid "One of the following: %s" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/nullsection.htm:17 +#: modules/luci-compat/luasrc/view/cbi/ucisection.htm:22 +msgid "One or more fields contain invalid values!" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/map.htm:32 +msgid "One or more invalid/required values on tab" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/nullsection.htm:19 +#: modules/luci-compat/luasrc/view/cbi/ucisection.htm:24 +msgid "One or more required fields have no value!" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:229 +msgid "" +"Only if current active slave fails and the primary slave is up (failure, 2)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:444 +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:19 +msgid "Open list..." +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_openconnect.lua:9 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:64 +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:12 +msgid "OpenFortivpn" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:882 +msgid "Operating frequency" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:1971 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3653 +msgid "Option \"%s\" contains an invalid input value." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:1984 +msgid "Option \"%s\" must not be empty." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4037 +msgid "Option changed" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4039 +msgid "Option removed" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1609 +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:92 +msgid "Optional" +msgstr "Opcional" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:102 +msgid "" +"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " +"starting with 0x." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:218 +msgid "" +"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or " +"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating " +"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') " +"for the interface." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:143 +msgid "" +"Optional. Base64-encoded preshared key. Adds in an additional layer of " +"symmetric-key cryptography for post-quantum resistance." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:159 +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:134 +msgid "Optional. Description of peer." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:87 +msgid "Optional. Do not create host routes to peers." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:161 +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:97 +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:165 +msgid "Optional. Port of peer." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:169 +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:78 +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:71 +msgid "Options" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:346 +msgid "Other:" +msgstr "Autre :" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:68 +msgid "Out" +msgstr "Sortissant" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:275 +msgid "Outbound:" +msgstr "Sortent :" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:91 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:93 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:98 +msgid "Outgoing checksum" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:86 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:91 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:88 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:93 +msgid "Outgoing key" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:93 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:95 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:100 +msgid "Outgoing serialization" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:50 +msgid "Output Interface" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:59 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:165 +msgid "Output zone" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:57 +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:222 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:40 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:50 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:76 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:71 +msgid "Override MAC address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:61 +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:226 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:57 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:62 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:62 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:67 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:44 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:53 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:54 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:120 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:158 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:71 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:145 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:132 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:110 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:119 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:97 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:77 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:62 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:57 +msgid "Override MTU" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:67 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:72 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:63 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:72 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:67 +msgid "Override TOS" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:62 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:67 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:67 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:72 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:58 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:67 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:62 +msgid "Override TTL" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1079 +msgid "Override default interface name" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:167 +msgid "Override the gateway in DHCP responses" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:603 +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:179 +msgid "Override the table used for internal routes" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:3 +msgid "Overview" +msgstr "Apercebut" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2721 +msgid "Overwrite existing file \"%s\" ?" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:70 +msgid "Owner" +msgstr "Proprietari" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:97 +msgid "PAP/CHAP (both)" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:98 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:108 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:90 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:45 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:89 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:76 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:44 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:63 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:82 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:46 +msgid "PAP/CHAP password" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:96 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:103 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:88 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:43 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:87 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:74 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:42 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:61 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:77 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:44 +msgid "PAP/CHAP username" +msgstr "Identificant PAP / CHAP" + +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:101 +msgid "PDP Type" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:69 +msgid "PID" +msgstr "PID" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:95 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:94 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:87 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:68 +msgid "PIN" +msgstr "Còdi personal" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:21 +#: modules/luci-compat/luasrc/model/network.lua:39 +msgid "PIN code rejected" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1477 +msgid "PMK R1 Push" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ppp.lua:13 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:43 +msgid "PPP" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:58 +msgid "PPPoA Encapsulation" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ppp.lua:19 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:28 +msgid "PPPoATM" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ppp.lua:17 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:28 +msgid "PPPoE" +msgstr "PPPoE" + +#: modules/luci-compat/luasrc/model/network/proto_pppossh.lua:9 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:28 +msgid "PPPoSSH" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ppp.lua:15 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:28 +msgid "PPtP" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:73 +msgid "PSID offset" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:70 +msgid "PSID-bits length" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:918 +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:882 +msgid "Packet Steering" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:53 +msgid "Packets" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:275 +msgid "Packets To Transmit Before Moving To Next Slave" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:152 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:825 +msgid "Part of zone %q" +msgstr "" + +#: modules/luci-base/luasrc/view/sysauth.htm:29 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1599 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:51 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:108 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:52 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:58 +msgid "Password" +msgstr "Senhal" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:25 +msgid "Password authentication" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1531 +msgid "Password of Private Key" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1589 +msgid "Password of inner Private Key" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:31 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:33 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:35 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:37 +msgid "Password strength" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:111 +msgid "Password2" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:239 +msgid "Paste or drag SSH key file…" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1510 +msgid "Path to CA-Certificate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1525 +msgid "Path to Client-Certificate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1528 +msgid "Path to Private Key" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1568 +msgid "Path to inner CA-Certificate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1583 +msgid "Path to inner Client-Certificate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1586 +msgid "Path to inner Private Key" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2731 +msgid "Paused" +msgstr "En pausa" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:271 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:281 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:332 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:342 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:352 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:237 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:247 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:257 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:266 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:276 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:294 +msgid "Peak:" +msgstr "Punta :" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:89 +msgid "Peer IP address to assign" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:14 +#: modules/luci-compat/luasrc/model/network.lua:32 +msgid "Peer address is missing" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:115 +msgid "Peers" +msgstr "Pars" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:80 +msgid "Perfect Forward Secrecy" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:93 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:95 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:100 +msgid "Perform outgoing packets serialization (optional)." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:34 +msgid "Perform reboot" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:378 +msgid "Perform reset" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:407 +msgid "Permission denied" +msgstr "Permission refusada" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:169 +msgid "Persistent Keep Alive" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:288 +msgid "Phy Rate:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:325 +msgid "Physical Settings" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:79 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:80 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:90 +msgid "Ping" +msgstr "Ping" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:48 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:49 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:83 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:84 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:138 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:63 +msgid "Pkts." +msgstr "" + +#: modules/luci-base/luasrc/view/sysauth.htm:19 +msgid "Please enter your username and password." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3768 +msgid "Please select the file to upload." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:53 +msgid "Policy" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:21 +msgid "Port" +msgstr "Pòrt" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:278 +msgid "Port status:" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:492 +msgid "Potential negation of: %s" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:38 +msgid "Power Management Mode" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:36 +msgid "Pre-emptive CRC errors (CRCP_P)" +msgstr "" + +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:73 +msgid "Prefer LTE" +msgstr "Preferir LTE" + +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:74 +msgid "Prefer UMTS" +msgstr "Preferir UMTS" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:33 +msgid "Prefix Delegated" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:143 +msgid "Preshared Key" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:131 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:115 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:102 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:76 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:89 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:112 +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:407 +msgid "Prevent listening on these interfaces." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1075 +msgid "Prevents client-to-client communication" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:211 +msgid "Primary Slave" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:228 +msgid "" +"Primary becomes active slave when it comes back up if speed and duplex " +"better than current slave (better, 1)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:227 +msgid "Primary becomes active slave whenever it comes back up (always, 0)" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:61 +msgid "Private Key" +msgstr "Clau privada" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:64 +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:63 +msgid "Processes" +msgstr "Processus" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:21 +msgid "Profile" +msgstr "Perfil" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:66 +msgid "Prot." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:79 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:397 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:727 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:382 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:32 +msgid "Protocol" +msgstr "Protocòl" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:265 +msgid "Provide NTP server" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:825 +msgid "Provide new network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1004 +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:139 +msgid "Public Key" +msgstr "Clau publica" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:275 +msgid "" +"Public keys allow for the passwordless SSH logins with a higher security " +"compared to the use of plain passwords. In order to upload a new key to the " +"device, paste an OpenSSH compatible public key line or drag a .pub file into the input field." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:214 +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_qmi.lua:9 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:27 +msgid "QMI Cellular" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:41 +msgid "Quality" +msgstr "Qualitat" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:264 +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1465 +msgid "R0 Key Lifetime" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1471 +msgid "R1 Key Holder" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:88 +msgid "RFC3947 NAT-T mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:939 +msgid "RSSI threshold for joining" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:903 +msgid "RTS/CTS Threshold" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:48 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:83 +msgid "RX" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:142 +msgid "RX Rate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2072 +msgid "RX Rate / TX Rate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1343 +msgid "Radius-Accounting-Port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1348 +msgid "Radius-Accounting-Secret" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1338 +msgid "Radius-Accounting-Server" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1328 +msgid "Radius-Authentication-Port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1333 +msgid "Radius-Authentication-Secret" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1323 +msgid "Radius-Authentication-Server" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:102 +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:178 +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:402 +msgid "Really switch protocol?" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:75 +msgid "Realtime Graphs" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1448 +msgid "Reassociation Deadline" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:293 +msgid "Rebind protection" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:20 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:126 +msgid "Reboot" +msgstr "Reaviar" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:153 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:162 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:46 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:51 +msgid "Rebooting…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:21 +msgid "Reboots the operating system of your device" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/netdev.js:25 +msgid "Receive" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:83 +msgid "Recommended. IP addresses of the WireGuard interface." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:348 +msgid "Reconnect this interface" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:56 +msgid "References" +msgstr "Referéncias" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2725 +msgid "Refreshing" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_relay.lua:153 +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:39 +msgid "Relay" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_relay.lua:157 +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:36 +msgid "Relay Bridge" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:154 +msgid "Relay between networks" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_relay.lua:12 +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:64 +msgid "Relay bridge" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:50 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:49 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:40 +msgid "Remote IPv4 address" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:42 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:42 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:40 +msgid "Remote IPv4 address or FQDN" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:40 +msgid "Remote IPv6 address" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:42 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:42 +msgid "Remote IPv6 address or FQDN" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:849 +msgid "Remove" +msgstr "Levar" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1914 +msgid "Replace wireless configuration" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:17 +msgid "Request IPv6-address" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:23 +msgid "Request IPv6-prefix of length" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:408 +msgid "Request timeout" +msgstr "Temps passat per la requèsta" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:90 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:95 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:97 +msgid "Require incoming checksum (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Require incoming packets serialization (optional)." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1610 +msgid "Required" +msgstr "Requesit" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:34 +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:61 +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:139 +msgid "Required. Base64-encoded public key of peer." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:148 +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1239 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1240 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1241 +msgid "Requires hostapd" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1246 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1247 +msgid "Requires hostapd with EAP Suite-B support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1244 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1245 +msgid "Requires hostapd with EAP support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1248 +msgid "Requires hostapd with OWE support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1242 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1243 +msgid "Requires hostapd with SAE support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1237 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1238 +msgid "Requires hostapd with WEP support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1607 +msgid "" +"Requires the 'full' version of wpad/hostapd and support from the wifi driver " +"
(as of Jan 2019: ath9k, ath10k, mwlwifi and mt76)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:233 +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1253 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1254 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1255 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1267 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1268 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1269 +msgid "Requires wpa-supplicant" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1260 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1261 +msgid "Requires wpa-supplicant with EAP Suite-B support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1258 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1259 +msgid "Requires wpa-supplicant with EAP support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1262 +msgid "Requires wpa-supplicant with OWE support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1256 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1257 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1272 +msgid "Requires wpa-supplicant with SAE support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1251 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1252 +msgid "Requires wpa-supplicant with WEP support" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:224 +msgid "Reselection policy for primary slave" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2203 +#: modules/luci-base/luasrc/view/sysauth.htm:39 +#: modules/luci-compat/luasrc/view/cbi/delegator.htm:17 +#: modules/luci-compat/luasrc/view/cbi/footer.htm:30 +#: modules/luci-compat/luasrc/view/cbi/simpleform.htm:66 +msgid "Reset" +msgstr "Reinicializar" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:308 +msgid "Reset Counters" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:376 +msgid "Reset to defaults" +msgstr "Reïnicializar" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:162 +msgid "Resolv and Hosts Files" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:188 +msgid "Resolve file" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:405 +msgid "Resource not found" +msgstr "Ressorsa introbabla" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:350 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:817 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:100 +msgid "Restart" +msgstr "Reaviar" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:313 +msgid "Restart Firewall" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:815 +msgid "Restart radio interface" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:372 +msgid "Restore" +msgstr "Restablir" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:382 +msgid "Restore backup" +msgstr "Restaurar salvagarda" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:371 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:372 +msgid "Reveal/hide password" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4053 +msgid "Revert" +msgstr "Tornar" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4138 +msgid "Revert changes" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4320 +msgid "Revert request failed with status %h" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4300 +msgid "Reverting configuration…" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:372 +msgid "Root directory for files served via TFTP" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:297 +msgid "Root preparation" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:202 +msgid "Round-Robin policy (balance-rr, 0)" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:159 +msgid "Route Allowed IPs" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:73 +msgid "Route table" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:60 +msgid "Route type" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:625 +msgid "Router Advertisement-Service" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:46 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:26 +msgid "Router Password" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:15 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:194 +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:27 +msgid "Routes" +msgstr "Rotas" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:15 +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:206 +msgid "Rule" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:335 +msgid "Run a filesystem check before mounting the device" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:335 +msgid "Run filesystem check" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2364 +msgid "Runtime error" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:219 +msgid "SHA256" +msgstr "SHA256" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:59 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:175 +msgid "SNR" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:10 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:38 +msgid "SSH Access" +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:70 +msgid "SSH server address" +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:74 +msgid "SSH server port" +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:58 +msgid "SSH username" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:274 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:51 +msgid "SSH-Keys" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:156 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:181 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1662 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:42 +msgid "SSID" +msgstr "SSID" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:9 +msgid "SSTP" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:41 +msgid "SSTP Server" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:339 +msgid "SWAP" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2866 +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2198 +#: modules/luci-compat/luasrc/view/cbi/error.htm:17 +#: modules/luci-compat/luasrc/view/cbi/footer.htm:26 +#: modules/luci-compat/luasrc/view/cbi/header.htm:20 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:435 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:123 +msgid "Save" +msgstr "Salvagardar" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2180 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4049 +#: modules/luci-compat/luasrc/view/cbi/footer.htm:22 +msgid "Save & Apply" +msgstr "Salvagardar e aplicar" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:602 +msgid "Save error" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:406 +msgid "Save mtdblock" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:396 +msgid "Save mtdblock contents" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:822 +msgid "Scan" +msgstr "Analisar" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontab.js:26 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:76 +msgid "Scheduled Tasks" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4033 +msgid "Section added" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4035 +msgid "Section removed" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:331 +msgid "See \"mount\" manpage for details" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:257 +msgid "" +"Select 'Force upgrade' to flash the image even if the image format check " +"fails. Use only if you are sure that the firmware is correct and meant for " +"your device!" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2622 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2762 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2927 +msgid "Select file…" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:318 +msgid "Selects the transmit hash policy to use for slave selection" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:144 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:128 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:115 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:89 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:102 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:125 +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:24 +msgid "Send the hostname of this device" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:157 +msgid "Server Settings" +msgstr "Paramètres del servidor" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:50 +msgid "Service Name" +msgstr "Nom de servici" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:87 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:71 +msgid "Service Type" +msgstr "Tipe de servici" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:36 +msgid "Services" +msgstr "Servicis" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2668 +msgid "Session expired" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:107 +msgid "Set VPN as Default Route" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:864 +msgid "" +"Set interface properties regardless of the link carrier (If set, carrier " +"sense events do not invoke hotplug handlers)." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:300 +msgid "Set same MAC Address to all slaves" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:642 +msgid "Set this interface as master for the dhcpv6 relay." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:304 +msgid "Set to currently active slave (active, 1)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:305 +msgid "Set to first slave added to the bond (follow, 2)" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_modemmanager.lua:55 +#: modules/luci-compat/luasrc/model/network/proto_qmi.lua:55 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:23 +msgid "Setting PLMN failed" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:68 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:26 +msgid "Setting operation mode failed" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:565 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:575 +msgid "Setup DHCP Server" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:31 +msgid "Severely Errored Seconds (SES)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:208 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:80 +msgid "Short GI" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1085 +msgid "Short Preamble" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:442 +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:18 +msgid "Show current backup file list" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:264 +msgid "Show empty chains" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:354 +msgid "Shutdown this interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:57 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:63 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:186 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1661 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:41 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:141 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:173 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:179 +msgid "Signal" +msgstr "Senhal" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2071 +msgid "Signal / Noise" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:26 +msgid "Signal Attenuation (SATN)" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:260 +msgid "Signal:" +msgstr "Senhal :" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3786 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:217 +msgid "Size" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:361 +msgid "Size of DNS query cache" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:187 +msgid "Size of the ZRam device in megabytes" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/footer.htm:18 +#: modules/luci-compat/luasrc/view/cbi/simpleform.htm:57 +msgid "Skip" +msgstr "Ignorar" + +#: themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm:36 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:46 +msgid "Skip to content" +msgstr "" + +#: themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm:35 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:45 +msgid "Skip to navigation" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:178 +msgid "Slave Interfaces" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2883 +#: modules/luci-compat/luasrc/model/network.lua:1428 +msgid "Software VLAN" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/header.htm:5 +msgid "Some fields are invalid, cannot save values!" +msgstr "" + +#: modules/luci-base/luasrc/view/error404.htm:9 +msgid "Sorry, the object you requested was not found." +msgstr "" + +#: modules/luci-base/luasrc/view/error500.htm:9 +msgid "Sorry, the server encountered an unexpected error." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:414 +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:383 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:69 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:182 +msgid "Source" +msgstr "Font" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:84 +msgid "Source Address" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:50 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:50 +msgid "Source interface" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:342 +msgid "" +"Specifies that duplicate frames (received on inactive ports) should be " +"dropped or delivered" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:358 +msgid "Specifies the ARP link monitoring frequency in milliseconds" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:366 +msgid "Specifies the IP addresses to use for ARP monitoring" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:395 +msgid "Specifies the MII link monitoring frequency in milliseconds" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:259 +msgid "Specifies the aggregation selection logic to use" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:292 +msgid "Specifies the directory the device is attached to" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:252 +msgid "" +"Specifies the mac-address for the actor in protocol packet exchanges " +"(LACPDUs). If empty, masters' mac address defaults to system default" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:175 +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:171 +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:886 +msgid "" +"Specifies the maximum transmit power the wireless radio may use. Depending " +"on regulatory requirements and wireless usage, the actual transmit power may " +"be reduced by the driver." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:236 +msgid "" +"Specifies the minimum number of links that must be active before asserting " +"carrier" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:200 +msgid "Specifies the mode to be used for this bonding interface" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:333 +msgid "" +"Specifies the number of IGMP membership reports to be issued after a " +"failover event in 200ms intervals" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:276 +msgid "" +"Specifies the number of packets to transmit through a slave before moving to " +"the next one" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:310 +msgid "" +"Specifies the number of peer notifications (gratuitous ARPs and unsolicited " +"IPv6 Neighbor Advertisements) to be issued after a failover event" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:284 +msgid "" +"Specifies the number of seconds between instances where the bonding driver " +"sends learning packets to each slaves peer switch" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:374 +msgid "Specifies the quantity of ARP IP targets that must be reachable" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:268 +msgid "" +"Specifies the rate in which the link partner will be asked to transmit " +"LACPDU packets" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:225 +msgid "" +"Specifies the reselection policy for the primary slave when failure of the " +"active slave or recovery of the primary slave occurs" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:244 +msgid "Specifies the system priority" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:403 +msgid "" +"Specifies the time in milliseconds to wait before disabling a slave after a " +"link failure detection" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:411 +msgid "" +"Specifies the time in milliseconds to wait before enabling a slave after a " +"link recovery detection" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:382 +msgid "" +"Specifies whether ARP probes and replies should be validated or non-ARP " +"traffic should be filtered for link monitoring" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:301 +msgid "" +"Specifies whether active-backup mode should set all slaves to the same MAC " +"address at enslavement" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:419 +msgid "" +"Specifies whether or not miimon should use MII or ETHTOOL ioctls vs. " +"netif_carrier_ok()" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:293 +msgid "" +"Specifies whether to shuffle active flows across slaves based on the load" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:179 +msgid "" +"Specifies which slave interfaces should be attached to this bonding interface" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:212 +msgid "" +"Specifies which slave is the primary device. It will always be the active " +"slave while it is available" +msgstr "" + +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:63 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:72 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:67 +msgid "Specify a TOS (Type of Service)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:67 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:72 +msgid "" +"Specify a TOS (Type of Service). Can be either inherit (the " +"outer header inherits the value of the inner header) or an hexadecimal value " +"starting with 0x (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:62 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:67 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:67 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:72 +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64) (optional)." +msgstr "" + +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:58 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:67 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:62 +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:72 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:77 +msgid "" +"Specify a Traffic Class. Can be either inherit (the outer " +"header inherits the value of the inner header) or an hexadecimal value " +"starting with 0x (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:57 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:62 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:62 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:67 +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes) (optional)." +msgstr "" + +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:53 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:62 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:57 +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1931 +msgid "Specify the secret encryption key here." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:581 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:99 +msgid "Start" +msgstr "Debuta" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:76 +msgid "Start priority" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1765 +msgid "Start refresh" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4253 +msgid "Starting configuration apply…" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1678 +msgid "Starting wireless scan..." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:109 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:64 +msgid "Startup" +msgstr "Aviada" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:19 +msgid "Static IPv4 Routes" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:19 +msgid "Static IPv6 Routes" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:165 +msgid "Static Leases" +msgstr "" + +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:76 +msgid "Static Routes" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:1981 +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:172 +#: modules/luci-compat/luasrc/model/network.lua:967 +msgid "Static address" +msgstr "Adreça estatica" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:411 +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1102 +msgid "Station inactivity limit" +msgstr "" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:16 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:385 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:871 +#: modules/luci-mod-status/luasrc/view/admin_status/index.htm:9 +msgid "Status" +msgstr "Estatut" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:356 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:101 +msgid "Stop" +msgstr "Arrestar" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1676 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1770 +msgid "Stop refresh" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:259 +msgid "Strict order" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:33 +msgid "Strong" +msgstr "Fòrt" + +#: modules/luci-compat/luasrc/view/cbi/simpleform.htm:61 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1956 +msgid "Submit" +msgstr "Sometre" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:203 +msgid "Suppress logging" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:204 +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:44 +msgid "Swap free" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:139 +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:3 +msgid "Switch" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:172 +msgid "Switch %q" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:150 +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2883 +#: modules/luci-compat/luasrc/model/network.lua:1426 +msgid "Switch VLAN" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:403 +msgid "Switch protocol" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:103 +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:104 +#: modules/luci-compat/luasrc/view/cbi/ipaddr.htm:26 +msgid "Switch to CIDR list notation" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2657 +msgid "Symbolic link" +msgstr "Ligam simbolic" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:75 +msgid "Sync with NTP-Server" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:67 +msgid "Sync with browser" +msgstr "" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:26 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:17 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:99 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:3 +msgid "System" +msgstr "Sistèma" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/syslog.js:25 +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:39 +msgid "System Log" +msgstr "Jornal sistèma" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:243 +msgid "System Priority" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:104 +msgid "System Properties" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:141 +msgid "System log buffer size" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:336 +msgid "TCP:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:163 +msgid "TFTP Settings" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:371 +msgid "TFTP server root" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:49 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:84 +msgid "TX" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:142 +msgid "TX Rate" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:17 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:166 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:184 +msgid "Table" +msgstr "Tablèu" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:31 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:65 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:163 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:181 +msgid "Target" +msgstr "Cibla" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:103 +msgid "Target network" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:50 +msgid "Terminate" +msgstr "Terminar" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:84 +msgid "The block mount command failed with code %d" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:77 +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:40 +msgid "The IPv4 address or the fully-qualified domain name of the remote end." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:42 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:42 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:40 +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:40 +msgid "The IPv6 address or the fully-qualified domain name of the remote end." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:42 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:42 +msgid "" +"The IPv6 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:53 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:59 +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1916 +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/error.htm:6 +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4129 +msgid "" +"The device could not be reached within %d seconds after applying the pending " +"changes, which caused the configuration to be rolled back for safety " +"reasons. If you believe that the configuration changes are correct " +"nonetheless, perform an unchecked configuration apply. Alternatively, you " +"can dismiss this warning and edit changes before attempting to apply again, " +"or revert all pending changes to keep the currently working configuration " +"state." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:280 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:392 +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:736 +msgid "" +"The existing wireless configuration needs to be changed for LuCI to function " +"properly." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:215 +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:195 +msgid "The following rules are currently active on this system." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:154 +msgid "The gateway address must not be a local IP address" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:147 +msgid "The given SSH public key has already been added." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:153 +msgid "" +"The given SSH public key is invalid. Please supply proper public RSA or " +"ECDSA keys." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:716 +msgid "The interface name is already used" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:722 +msgid "The interface name is too long" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:61 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:55 +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:57 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:63 +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:163 +msgid "The local IPv4 address" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:46 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:46 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:44 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:44 +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:169 +msgid "The local IPv4 netmask" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:46 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:46 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:44 +msgid "The local IPv6 address over which the tunnel is created (optional)." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1922 +msgid "The network name is already used" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:139 +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:158 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:42 +msgid "The reboot command failed with code %d" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:147 +msgid "The restore command failed with code %d" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1297 +msgid "The selected %s mode is incompatible with %s encryption" +msgstr "" + +#: modules/luci-base/luasrc/view/csrftoken.htm:11 +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:98 +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:291 +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:163 +msgid "" +"The system is rebooting now. If the restored configuration changed the " +"current LAN IP address, you might need to reconnect manually." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:85 +msgid "The system password has been successfully changed." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:317 +msgid "The sysupgrade command failed with code %d" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:120 +msgid "" +"The uploaded backup archive appears to be valid and contains the files " +"listed below. Press \"Continue\" to restore the backup and reboot, or " +"\"Cancel\" to abort the operation." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:115 +msgid "The uploaded backup archive is not readable" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:244 +msgid "The uploaded firmware does not allow keeping current configuration." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:239 +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:535 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:567 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:52 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:89 +msgid "There are no active leases" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4268 +msgid "There are no changes to apply" +msgstr "" + +#: themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm:55 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:213 +#: themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm:56 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:80 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:282 +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:49 +msgid "This IPv4 address of the relay" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1551 +msgid "This authentication type is not applicable to the selected EAP method." +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:57 +msgid "This does not look like a valid PEM file" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:256 +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' for domain-specific or full upstream DNS servers." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:426 +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:16 +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:81 +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:116 +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:54 +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with ...:2/64" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:173 +msgid "" +"This is the only DHCP in the local network" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:73 +msgid "This is the plain username for logging into the account" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:57 +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontab.js:28 +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:50 +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:65 +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1505 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1563 +msgid "" +"This option cannot be used because the ca-bundle package is not installed." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2205 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2511 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:172 +#: modules/luci-compat/luasrc/view/cbi/tsection.htm:32 +msgid "This section contains no values yet" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:110 +msgid "Time Synchronization" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1093 +msgid "Time interval for rekeying GTK" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:124 +msgid "Timezone" +msgstr "Fus orari" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2678 +msgid "To login…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:372 +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:907 +msgid "Tone" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:35 +msgid "Total Available" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:102 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:103 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:113 +msgid "Traceroute" +msgstr "Traceroute" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:53 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:64 +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:96 +msgid "Traffic" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:72 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:77 +msgid "Traffic Class" +msgstr "Classa del trafic" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:385 +msgid "Transfer" +msgstr "Transferir" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/netdev.js:24 +msgid "Transmit" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:317 +msgid "Transmit Hash Policy" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js:74 +msgid "Trigger" +msgstr "Desenclavador" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/netdev.js:19 +msgid "Trigger Mode" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:69 +msgid "Tunnel ID" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2886 +#: modules/luci-compat/luasrc/model/network.lua:1431 +msgid "Tunnel Interface" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:44 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:55 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:76 +msgid "Tunnel Link" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:185 +msgid "Tx-Power" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:44 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:61 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:43 +msgid "Type" +msgstr "Tipe" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:326 +msgid "UDP:" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:90 +msgid "UMTS only" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_3g.lua:10 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:43 +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:254 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:360 +msgid "UUID" +msgstr "UUID" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:16 +#: modules/luci-base/htdocs/luci-static/resources/network.js:17 +#: modules/luci-compat/luasrc/model/network.lua:34 +#: modules/luci-compat/luasrc/model/network.lua:35 +msgid "Unable to determine device name" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:18 +#: modules/luci-compat/luasrc/model/network.lua:36 +msgid "Unable to determine external IP address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:19 +#: modules/luci-compat/luasrc/model/network.lua:37 +msgid "Unable to determine upstream interface" +msgstr "" + +#: modules/luci-base/luasrc/view/error404.htm:11 +msgid "Unable to dispatch" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/dmesg.js:9 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/syslog.js:15 +msgid "Unable to load log data:" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_modemmanager.lua:54 +#: modules/luci-compat/luasrc/model/network/proto_qmi.lua:54 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:22 +msgid "Unable to obtain client ID" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:221 +msgid "Unable to obtain mount information" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:278 +msgid "Unable to reset ip6tables counters: %s" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:276 +msgid "Unable to reset iptables counters: %s" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:61 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:7 +msgid "Unable to resolve AFTR host name" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:20 +#: modules/luci-compat/luasrc/model/network.lua:38 +msgid "Unable to resolve peer host name" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:284 +msgid "Unable to restart firewall: %s" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontab.js:20 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:342 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:57 +msgid "Unable to save contents: %s" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:33 +msgid "Unavailable Seconds (UAS)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/fs.js:102 +msgid "Unexpected reply data format" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:1983 +#: modules/luci-compat/luasrc/model/network.lua:971 +msgid "Unknown" +msgstr "Desconegut" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:47 +msgid "Unknown and unsupported connection method." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2292 +#: modules/luci-compat/luasrc/model/network.lua:1138 +msgid "Unknown error (%s)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:412 +msgid "Unknown error code" +msgstr "Còde d'error desconegut" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:1980 +#: modules/luci-base/htdocs/luci-static/resources/protocol/none.js:6 +#: modules/luci-compat/luasrc/model/network.lua:965 +msgid "Unmanaged" +msgstr "Pas gerit" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:195 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:217 +msgid "Unmount" +msgstr "Desmontar" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:112 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:259 +msgid "Unnamed key" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3973 +msgid "Unsaved Changes" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:410 +msgid "Unspecified error" +msgstr "Error pas precisada" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:64 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:9 +msgid "Unsupported MAP type" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:69 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:27 +msgid "Unsupported modem" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:267 +msgid "Unsupported protocol type." +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:151 +msgid "Up" +msgstr "Amont" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:410 +msgid "Up Delay" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3860 +msgid "Upload" +msgstr "Mandadís" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:413 +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:138 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:169 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:384 +msgid "Upload archive..." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2816 +msgid "Upload file" +msgstr "Enviar un fichièr" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2791 +msgid "Upload file…" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2738 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3848 +msgid "Upload request failed: %s" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3767 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3821 +msgid "Uploading file…" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:737 +msgid "" +"Upon pressing \"Continue\", anonymous \"wifi-iface\" sections will be " +"assigned with a name in the form wifinet# and the network will be " +"restarted to apply the updated configuration." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:81 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:60 +msgid "Uptime" +msgstr "Temps de connexion" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:177 +msgid "Use /etc/ethers" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:269 +msgid "Use DHCP advertised servers" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:167 +msgid "Use DHCP gateway" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:40 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:124 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:39 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:116 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:68 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:59 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:103 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:90 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:64 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:77 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:100 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:69 +msgid "Use DNS servers advertised by peer" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:565 +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:56 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:97 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:77 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:61 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:75 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:92 +msgid "Use MTU on tunnel interface" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:93 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:73 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:57 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:88 +msgid "Use TTL on tunnel interface" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:320 +msgid "Use XOR of hardware MAC addresses (layer2)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:321 +msgid "Use XOR of hardware MAC addresses and IP addresses (layer2+3)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:323 +msgid "" +"Use XOR of hardware MAC addresses and IP addresses, rely on skb_flow_dissect " +"(encap2+3)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:294 +msgid "Use as external overlay (/overlay)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:293 +msgid "Use as root filesystem (/)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:34 +msgid "Use broadcast flag" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:860 +msgid "Use builtin IPv6-management" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:43 +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:182 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:127 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:42 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:119 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:62 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:106 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:93 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:67 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:80 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:103 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:72 +msgid "Use custom DNS servers" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:37 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:116 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:33 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:64 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:56 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:100 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:87 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:61 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:74 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:97 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:61 +msgid "Use default gateway" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:48 +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:230 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:119 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:51 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:88 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:68 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:52 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:70 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:83 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:111 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:153 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:72 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:67 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:111 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:98 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:72 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:85 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:108 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:64 +msgid "Use gateway metric" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:96 +msgid "Use legacy MAP" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:96 +msgid "" +"Use legacy MAP interface identifier format (draft-ietf-softwire-map-00) " +"instead of RFC7597" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:179 +msgid "Use routing table" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1498 +msgid "Use system certificates" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1556 +msgid "Use system certificates for inner-tunnel" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:412 +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address identifies the host, the IPv4-Address specifies the fixed " +"address to use, and the Hostname is assigned as a symbolic name to " +"the requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:322 +msgid "Use upper layer protocol information (layer3+4)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:324 +msgid "" +"Use upper layer protocol information, rely on skb_flow_dissect (encap3+4)" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:36 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:194 +msgid "Used" +msgstr "Utilizat" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1394 +msgid "Used Key Slot" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1437 +msgid "" +"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not " +"needed with normal WPA(2)-PSK." +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:105 +msgid "User Group" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:114 +msgid "User certificate (PEM encoded)" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:126 +msgid "User key (PEM encoded)" +msgstr "" + +#: modules/luci-base/luasrc/view/sysauth.htm:23 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:106 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:50 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:56 +msgid "Username" +msgstr "Nom d'utilizaire" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:975 +msgid "VC-Mux" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:923 +msgid "VDSL" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:173 +msgid "VLANs on %q" +msgstr "" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:54 +msgid "VPN" +msgstr "VPN" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:42 +msgid "VPN Local address" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:46 +msgid "VPN Local port" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:96 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:42 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:58 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:39 +msgid "VPN Server" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:99 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:45 +msgid "VPN Server port" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:103 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:60 +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_vpnc.lua:9 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:9 +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:10 +msgid "VXLAN (RFC7348)" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:53 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:48 +msgid "VXLAN network identifier" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:10 +msgid "VXLANv6 (RFC7348)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1498 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1556 +msgid "" +"Validate server certificate using built-in system CA bundle,
requires " +"the \"ca-bundle\" package" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:387 +msgid "Validation for all slaves" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:385 +msgid "Validation only for active slave" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:386 +msgid "Validation only for backup slaves" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:154 +msgid "Value must not be empty" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:73 +msgid "Vendor" +msgstr "Vendeire" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:55 +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:196 +msgid "Verifying the uploaded image file." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:59 +msgid "Virtual dynamic interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1032 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1033 +msgid "WDS" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1217 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1306 +msgid "WEP Open System" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1218 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1307 +msgid "WEP Shared Key" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1931 +msgid "WEP passphrase" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1070 +msgid "WMM Mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1931 +msgid "WPA passphrase" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1208 +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:47 +msgid "Waiting for device..." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:168 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:178 +msgid "Warning" +msgstr "Avertiment" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:26 +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:37 +msgid "Weak" +msgstr "Feble" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1460 +msgid "" +"When using a PSK, the PMK can be automatically generated. When enabled, the " +"R0/R1 key options below are not applied. Disable this to use the R0 and R1 " +"key options." +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/wireless_modefreq.htm:166 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:468 +msgid "Width" +msgstr "Largor" + +#: modules/luci-compat/luasrc/model/network/proto_wireguard.lua:9 +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:29 +msgid "WireGuard VPN" +msgstr "" + +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:17 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:87 +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:105 +msgid "Wireless" +msgstr "Inalambric" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2874 +#: modules/luci-compat/luasrc/model/network.lua:1419 +msgid "Wireless Adapter" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2853 +#: modules/luci-base/htdocs/luci-static/resources/network.js:4057 +#: modules/luci-compat/luasrc/model/network.lua:1405 +#: modules/luci-compat/luasrc/model/network.lua:1868 +msgid "Wireless Network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:753 +msgid "Wireless Overview" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:922 +msgid "Wireless Security" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:735 +msgid "Wireless configuration migration" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:153 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:193 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:47 +msgid "Wireless is disabled" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:153 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:193 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:47 +msgid "Wireless is not associated" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:877 +msgid "Wireless network is disabled" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:877 +msgid "Wireless network is enabled" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:275 +msgid "Write received DNS requests to syslog" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:160 +msgid "Write system log to file" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:204 +msgid "XOR policy (balance-xor, 2)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:3643 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:295 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:344 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:109 +msgid "Yes" +msgstr "Òc" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:303 +msgid "Yes (none, 0)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:176 +msgid "" +"You appear to be currently connected to the device via the \"%h\" interface. " +"Do you really want to shut down the interface?" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:112 +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" + +#: themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm:65 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:223 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:73 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:294 +msgid "" +"You must enable JavaScript in your browser or LuCI will not work properly." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:115 +msgid "" +"You must select a primary interface which is included in selected slave " +"interfaces!" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:96 +msgid "" +"You must select at least one ARP IP target if ARP monitoring is selected!" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:192 +msgid "ZRam Compression Algorithm" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:199 +msgid "ZRam Compression Streams" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:185 +msgid "ZRam Settings" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:187 +msgid "ZRam Size" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:331 +msgid "any" +msgstr "Quin que siá" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:908 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:916 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:921 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1157 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:78 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:48 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:51 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:103 +msgid "auto" +msgstr "auto" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:85 +msgid "automatic" +msgstr "automatic" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:82 +msgid "baseT" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:981 +msgid "bridged" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:146 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:401 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:35 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:99 +#: modules/luci-compat/luasrc/view/cbi/network_netlist.htm:31 +msgid "create" +msgstr "crear" + +#: modules/luci-compat/luasrc/view/cbi/network_netlist.htm:69 +msgid "create:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:55 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:57 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:58 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:62 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:63 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:83 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:84 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:87 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:185 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:186 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:187 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:171 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:173 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:174 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:178 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:179 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:261 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:264 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:267 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:271 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:274 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:277 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:303 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:304 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:305 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:309 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:310 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:311 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:313 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:314 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:315 +msgid "dBm" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1014 +msgid "disable" +msgstr "desactivar" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:185 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:626 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:632 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:638 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:91 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:25 +msgid "disabled" +msgstr "desactivat" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:519 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:553 +msgid "driver default" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:81 +msgid "e.g: --proxy 10.10.10.10" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:83 +msgid "e.g: dump" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:524 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:545 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:42 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:69 +msgid "expired" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:182 +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:85 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:195 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:61 +msgid "forward" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:84 +msgid "full-duplex" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:84 +msgid "half-duplex" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:569 +msgid "hexadecimal encoded value" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1738 +msgid "hidden" +msgstr "amagat" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:629 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:635 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:640 +msgid "hybrid mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:36 +msgid "if target is a network" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:63 +msgid "ignore" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:69 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:191 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:46 +msgid "input" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:395 +msgid "key between 8 and 63 characters" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:407 +msgid "key with either 5 or 13 characters" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:189 +msgid "local DNS file" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1316 +msgid "medium security" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1465 +msgid "minutes" +msgstr "minutas" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:422 +msgid "netif_carrier_ok()" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:46 +msgid "no" +msgstr "non" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:76 +msgid "no link" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:59 +msgid "non-empty value" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:3007 +msgid "none" +msgstr "pas res" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:41 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:55 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:69 +msgid "not present" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:347 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:901 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:905 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:197 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:245 +msgid "off" +msgstr "desactivat" + +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:196 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:242 +msgid "on" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1317 +msgid "open network" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:69 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:46 +msgid "output" +msgstr "sortida" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:241 +msgid "positive decimal value" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:233 +msgid "positive integer value" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:80 +msgid "random" +msgstr "aleatòri" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:628 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:634 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:639 +msgid "relay mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:982 +msgid "routed" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1093 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1102 +msgid "sec" +msgstr "seg" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:627 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:633 +msgid "server mode" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:53 +msgid "sstpc Log-level" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:649 +msgid "stateful-only" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:647 +msgid "stateless" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:648 +msgid "stateless + stateful" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1315 +msgid "strong security" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:352 +msgid "tagged" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1448 +msgid "time units (TUs / 1.024 ms) [1000-65535]" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:559 +msgid "unique value" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:534 +msgid "unknown" +msgstr "desconegut" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:340 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:522 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:543 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:40 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:67 +msgid "unlimited" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:3372 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:76 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:138 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:369 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:393 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:428 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:465 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:561 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:53 +#: modules/luci-compat/luasrc/view/cbi/network_netlist.htm:38 +msgid "unspecified" +msgstr "pas precisat" + +#: modules/luci-compat/luasrc/view/cbi/network_netlist.htm:71 +msgid "unspecified -or- create:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:350 +msgid "untagged" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:246 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:121 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:132 +msgid "valid IP address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:246 +msgid "valid IP address or prefix" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:281 +msgid "valid IPv4 CIDR" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:254 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:125 +msgid "valid IPv4 address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:254 +msgid "valid IPv4 address or network" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:374 +msgid "valid IPv4 address:port" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:314 +msgid "valid IPv4 network" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:276 +msgid "valid IPv4 or IPv6 CIDR" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:267 +msgid "valid IPv4 prefix value (0-32)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:286 +msgid "valid IPv6 CIDR" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:262 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:129 +msgid "valid IPv6 address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:262 +msgid "valid IPv6 address or prefix" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:304 +msgid "valid IPv6 host id" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:319 +msgid "valid IPv6 network" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:272 +msgid "valid IPv6 prefix value (0-128)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:340 +msgid "valid MAC address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:411 +msgid "valid UCI identifier" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:362 +msgid "valid UCI identifier, hostname or IP address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:383 +#: modules/luci-base/htdocs/luci-static/resources/validation.js:386 +msgid "valid address:port" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:533 +#: modules/luci-base/htdocs/luci-static/resources/validation.js:537 +msgid "valid date (YYYY-MM-DD)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:237 +msgid "valid decimal value" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:405 +msgid "valid hexadecimal WEP key" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:393 +msgid "valid hexadecimal WPA key" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:368 +msgid "valid host:port" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:355 +#: modules/luci-base/htdocs/luci-static/resources/validation.js:357 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:73 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:79 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:107 +msgid "valid hostname" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:345 +msgid "valid hostname or IP address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:229 +msgid "valid integer value" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:309 +msgid "valid network in address/netmask notation" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:508 +msgid "valid phone digit (0-9, \"*\", \"#\", \"!\" or \".\")" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:332 +#: modules/luci-base/htdocs/luci-static/resources/validation.js:335 +msgid "valid port or port range (port1-port2)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:324 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:136 +msgid "valid port value" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:513 +msgid "valid time (HH:MM:SS)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:435 +msgid "value between %d and %d characters" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:416 +msgid "value between %f and %f" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:420 +msgid "value greater or equal to %f" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:424 +msgid "value smaller or equal to %f" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:429 +msgid "value with %d characters" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:440 +msgid "value with at least %d characters" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:445 +msgid "value with at most %d characters" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1317 +msgid "weak security" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:46 +msgid "yes" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/delegator.htm:20 +msgid "« Back" +msgstr "" diff --git a/luci-base/po/templates/base.pot b/luci-base/po/templates/base.pot new file mode 100755 index 000000000..d23111f55 --- /dev/null +++ b/luci-base/po/templates/base.pot @@ -0,0 +1,7611 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:929 +msgid "%.1f dB" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:114 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:261 +msgid "%d Bit" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3689 +msgid "%d invalid field(s)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:35 +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:294 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:403 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:270 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:307 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:325 +msgid "(%d minute window, %d second interval)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:118 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:124 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:258 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:282 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:88 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:91 +msgid "(empty)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:351 +#: modules/luci-compat/luasrc/view/cbi/network_netinfo.htm:23 +#: modules/luci-compat/luasrc/view/cbi/network_netlist.htm:58 +msgid "(no interfaces attached)" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/ucisection.htm:48 +msgid "-- Additional Field --" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/cbi.js:275 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3372 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3704 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:767 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:1005 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:1974 +#: modules/luci-compat/luasrc/view/cbi/header.htm:8 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:88 +msgid "-- Please choose --" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/cbi.js:276 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:1006 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:1975 +#: modules/luci-compat/luasrc/view/cbi/header.htm:9 +msgid "-- custom --" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:270 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:379 +msgid "-- match by label --" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:256 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:362 +msgid "-- match by uuid --" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:27 +#: modules/luci-compat/luasrc/view/cbi/network_ifacelist.htm:44 +#: modules/luci-compat/luasrc/view/cbi/network_netlist.htm:23 +msgid "-- please select --" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:54 +msgctxt "sstp log level value" +msgid "0" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:939 +msgid "0 = not using RSSI threshold, 1 = do not change driver default" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:55 +msgctxt "sstp log level value" +msgid "1" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:231 +msgid "1 Minute Load:" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:251 +msgid "15 Minute Load:" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:56 +msgctxt "sstp log level value" +msgid "2" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:57 +msgctxt "sstp log level value" +msgid "3" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:58 +msgctxt "sstp log level value" +msgid "4" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1442 +msgid "4-character hexadecimal ID" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:18 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:11 +msgid "464XLAT (CLAT)" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:241 +msgid "5 Minute Load:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1471 +msgid "6-octet identifier as a hex string - no colons" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1431 +msgid "802.11r Fast Transition" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1619 +msgid "802.11w Association SA Query maximum timeout" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1626 +msgid "802.11w Association SA Query retry timeout" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1607 +msgid "802.11w Management Frame Protection" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1619 +msgid "802.11w maximum timeout" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1626 +msgid "802.11w retry timeout" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:956 +msgid "BSSID" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:326 +msgid "DNS query port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:317 +msgid "DNS server port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:260 +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:945 +msgid "ESSID" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:475 +msgid "IPv4-Address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:42 +msgid "IPv4-Gateway" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:603 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:36 +msgid "IPv4-Netmask" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:31 +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:42 +msgid "IPv6-Gateway" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:504 +msgid "IPv6-Suffix (hex)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js:58 +msgid "LED Configuration" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js:69 +msgid "LED Name" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:431 +msgid "MAC-Address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:498 +msgid "DUID" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:335 +msgid "" +"Max. DHCP leases" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:344 +msgid "" +"Max. EDNS0 packet size" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:353 +msgid "Max. concurrent queries" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontab.js:29 +msgid "" +"
Note: you need to manually restart the cron service if the crontab file " +"was empty before editing." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2720 +msgid "A directory with the same name already exists." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2670 +msgid "A new login is required since the authentication session expired." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:909 +msgid "A43C + J43 + A43" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:910 +msgid "A43C + J43 + A43 + V43" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:922 +msgid "ADSL" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:898 +msgid "ANSI T1.413" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:94 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:93 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:86 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:67 +msgid "APN" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:197 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:352 +msgid "ARP" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:365 +msgid "ARP IP Targets" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:357 +msgid "ARP Interval" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:381 +msgid "ARP Validation" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:373 +msgid "ARP mode to consider a slave as being up" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:77 +msgid "ARP monitoring is not supported for the selected policy!" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:175 +msgid "ARP retry threshold" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:917 +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:938 +msgid "ATM Bridges" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:970 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:66 +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:971 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:70 +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:938 +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:977 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:62 +msgid "ATM device number" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:37 +msgid "ATU-C System Vendor ID" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:265 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:543 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:547 +msgid "Absent Interface" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:47 +msgid "Access Concentrator" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:927 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1032 +msgid "Access Point" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:360 +msgid "Actions" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:200 +msgid "Active IPv4-Routes" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:206 +msgid "Active IPv6-Routes" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:81 +msgid "Active Connections" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:33 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:92 +msgid "Active DHCP Leases" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:52 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:94 +msgid "Active DHCPv6 Leases" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:203 +msgid "Active-Backup policy (active-backup, 1)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:3666 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:929 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:23 +msgid "Ad-Hoc" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:208 +msgid "Adaptive load balancing (balance-alb, 6)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:207 +msgid "Adaptive transmit load balancing (balance-tlb, 5)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2167 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2170 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2184 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2185 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3170 +#: modules/luci-compat/luasrc/view/cbi/nsection.htm:25 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:189 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:197 +#: modules/luci-compat/luasrc/view/cbi/tsection.htm:39 +#: modules/luci-compat/luasrc/view/cbi/tsection.htm:47 +#: modules/luci-compat/luasrc/view/cbi/ucisection.htm:54 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:827 +msgid "Add" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:942 +msgid "Add ATM Bridge" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:92 +msgid "Add IPv4 address…" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:207 +msgid "Add IPv6 address…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js:65 +msgid "Add LED action" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:219 +msgid "Add VLAN" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:15 +msgid "Add instance" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:146 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:152 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:247 +msgid "Add key" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:248 +msgid "Add local domain suffix to names served from hosts files" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:311 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:757 +msgid "Add new interface..." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:125 +msgid "Add peer" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:200 +msgid "Additional Hosts files" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:255 +msgid "Additional servers file" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:34 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:35 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:36 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:37 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:38 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:39 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:40 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:41 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:42 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:43 +msgid "Address" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:151 +msgid "Address to access local relay bridge" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:285 +msgid "Addresses" +msgstr "" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:3 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:15 +msgid "Administration" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:164 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:324 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:553 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:968 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:25 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:866 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:924 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:241 +msgid "Advanced Settings" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:28 +msgid "Aggregate Transmit Power (ACTATP)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:258 +msgid "Aggregation Selection Logic" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:261 +msgid "Aggregator: All slaves down or has no slaves (stable, 0)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:263 +msgid "" +"Aggregator: Chosen by the largest number of ports + slave added/removed or " +"state changes (count, 2)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:262 +msgid "Aggregator: Slave added/removed or state changes (bandwidth, 1)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:171 +msgid "Alert" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2871 +#: modules/luci-compat/luasrc/model/network.lua:1417 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:61 +msgid "Alias Interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:145 +msgid "Alias of \"%s\"" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:263 +msgid "All Servers" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:209 +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:208 +msgid "Allocate IP sequentially" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:25 +msgid "Allow SSH password authentication" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1112 +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1016 +msgid "Allow all except listed" +msgstr "" + +#: modules/luci-compat/root/usr/share/rpcd/acl.d/luci-compat.json:3 +msgid "Allow full UCI access for legacy applications" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:892 +msgid "Allow legacy 802.11b rates" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1015 +msgid "Allow listed only" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:300 +msgid "Allow localhost" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:157 +msgid "Allow rebooting the device" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:36 +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:31 +msgid "Allow root logins with password" +msgstr "" + +#: modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json:3 +msgid "Allow system feature probing" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:31 +msgid "Allow the root user to login with password" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:301 +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:148 +msgid "Allowed IPs" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:654 +msgid "Always announce default router" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/none.js:5 +msgid "Always off (kernel: none)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/default-on.js:6 +msgid "Always on (kernel: default-on)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:907 +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:603 +msgid "An error occurred while saving the form:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:890 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:20 +msgid "Annex" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:891 +msgid "Annex A + L + M (all)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:899 +msgid "Annex A G.992.1" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:900 +msgid "Annex A G.992.2" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:901 +msgid "Annex A G.992.3" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:902 +msgid "Annex A G.992.5" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:892 +msgid "Annex B (all)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:895 +msgid "Annex B G.992.1" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:896 +msgid "Annex B G.992.3" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:897 +msgid "Annex B G.992.5" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:893 +msgid "Annex J (all)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:903 +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:894 +msgid "Annex M (all)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:904 +msgid "Annex M G.992.3" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:905 +msgid "Annex M G.992.5" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:654 +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:659 +msgid "Announced DNS domains" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:658 +msgid "Announced DNS servers" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1596 +msgid "Anonymous Identity" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:162 +msgid "Anonymous Mount" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:158 +msgid "Anonymous Swap" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:84 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:174 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:195 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:60 +msgid "Any zone" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:119 +msgid "Apply backup?" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4276 +msgid "Apply request failed with status %h" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2181 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4142 +msgid "Apply unchecked" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4215 +msgid "Applying configuration changes… %ds" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:56 +msgid "Architecture" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:184 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:27 +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:189 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:31 +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2078 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:245 +msgid "Associated Stations" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:46 +msgid "Associations" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:154 +msgid "Attempt to enable configured mount points for attached devices" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:104 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:64 +msgid "Auth Group" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1535 +msgid "Authentication" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:96 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:70 +msgid "Authentication Type" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:172 +msgid "Authoritative" +msgstr "" + +#: modules/luci-base/luasrc/view/sysauth.htm:17 +msgid "Authorization Required" +msgstr "" + +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:196 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:197 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:241 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:244 +msgid "Auto Refresh" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:106 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:18 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:24 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:98 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:50 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:94 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:81 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:55 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:68 +msgid "Automatic" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_hnet.lua:7 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:7 +msgid "Automatic Homenet (HNCP)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:174 +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:170 +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:166 +msgid "Automatically mount swap on hotplug" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:170 +msgid "Automount Filesystem" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:166 +msgid "Automount Swap" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:193 +msgid "Available" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:268 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:278 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:329 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:339 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:349 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:234 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:244 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:254 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:263 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:273 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:291 +msgid "Average:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:911 +msgid "B43 + B43C" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:912 +msgid "B43 + B43C + V43" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:48 +msgid "BR / DMR / AFTR" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:158 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:182 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1665 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:44 +msgid "BSSID" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/footer.htm:14 +#: modules/luci-compat/luasrc/view/cbi/simpleform.htm:48 +msgid "Back to Overview" +msgstr "" + +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:48 +msgid "Back to configuration" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:363 +msgid "Backup" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:114 +msgid "Backup / Flash Firmware" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:323 +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:12 +msgid "Backup file list" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/wireless_modefreq.htm:158 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:451 +msgid "Band" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:910 +msgid "Beacon Interval" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:324 +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:46 +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:395 +msgid "" +"Bind dynamically to interfaces rather than wildcard address (recommended as " +"linux default)" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:52 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:57 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:57 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:62 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:48 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:55 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:57 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:52 +msgid "Bind interface" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:52 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:57 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:57 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:62 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:48 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:55 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:57 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:52 +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:129 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:188 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:63 +msgid "Bitrate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:266 +msgid "Bogus NX Domain Override" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:199 +msgid "Bonding Policy" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2877 +#: modules/luci-compat/luasrc/model/network.lua:1421 +msgid "Bridge" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:416 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:730 +msgid "Bridge interfaces" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:978 +msgid "Bridge unit number" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:412 +msgid "Bring up on boot" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:205 +msgid "Broadcast policy (broadcast, 3)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2810 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3799 +msgid "Browse…" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:37 +msgid "Buffered" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:138 +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:7 +msgid "CLAT configuration failed" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:72 +msgid "CPU usage (%)" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:41 +msgid "Cached" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_modemmanager.lua:53 +#: modules/luci-compat/luasrc/model/network/proto_qmi.lua:53 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:21 +msgid "Call failed" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2903 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3808 +#: modules/luci-compat/luasrc/view/cbi/delegator.htm:14 +#: modules/luci-compat/luasrc/view/cbi/simpleform.htm:52 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:187 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:763 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1952 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:128 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:272 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:184 +msgid "Cancel" +msgstr "" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:17 +msgid "Category" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1519 +msgid "Certificate constraint (Domain)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1516 +msgid "Certificate constraint (SAN)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1513 +msgid "Certificate constraint (Subject)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1522 +msgid "Certificate constraint (Wildcard)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1513 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1571 +msgid "" +"Certificate constraint substring - e.g. /CN=wifi.mycompany.com
See " +"`logread -f` during handshake for actual values" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1519 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1577 +msgid "" +"Certificate constraint(s) against DNS SAN values (if available)
or " +"Subject CN (exact match)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1522 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1580 +msgid "" +"Certificate constraint(s) against DNS SAN values (if available)
or " +"Subject CN (suffix match)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1516 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1574 +msgid "" +"Certificate constraint(s) via Subject Alternate Name values
(supported " +"attributes: EMAIL, DNS, URI) - e.g. DNS:wifi.mycompany.com" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:53 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:56 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:200 +msgid "Chain" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4028 +msgid "Changes" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4311 +msgid "Changes have been reverted." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:46 +msgid "Changes the administrator password for accessing the device" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/wireless_modefreq.htm:162 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:128 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:184 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:460 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1663 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:62 +msgid "Channel" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:174 +msgid "Check filesystems before mount" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1914 +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:110 +msgid "Checking archive…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:193 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:195 +msgid "Checking image…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:399 +msgid "Choose mtdblock" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:491 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1942 +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the custom field to define a new zone and attach the " +"interface to it." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:959 +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the custom field to define a new network." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1148 +msgid "Cipher" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:91 +msgid "Cisco UDP encapsulation" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:363 +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:396 +msgid "" +"Click \"Save mtdblock\" to download specified mtdblock file. (NOTE: THIS " +"FEATURE IS FOR PROFESSIONALS! )" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:3665 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:928 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1033 +msgid "Client" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:52 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:47 +msgid "Client ID to send when requesting DHCP" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:148 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:154 +msgid "Close" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:157 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:141 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:128 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:106 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:115 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:138 +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" + +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:49 +msgid "Close list..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:42 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:61 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2076 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:389 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:317 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:320 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:204 +msgid "Collecting data..." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:71 +msgid "Command" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:401 +msgid "Command OK" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:33 +msgid "Command failed" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:72 +msgid "Comment" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1634 +msgid "" +"Complicates key reinstallation attacks on the client side by disabling " +"retransmission of EAPOL-Key frames that are used to install keys. This " +"workaround might cause interoperability issues and reduced robustness of key " +"negotiation especially in environments with heavy traffic load." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:91 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:93 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:98 +msgid "Compute outgoing checksum (optional)." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4028 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:426 +msgid "Configuration" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4190 +msgid "Configuration changes applied." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4128 +msgid "Configuration changes have been rolled back!" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:63 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:21 +msgid "Configuration failed" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:175 +msgid "Confirm disconnect" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:55 +msgid "Confirmation" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:46 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:51 +msgid "Connected" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:9 +#: modules/luci-compat/luasrc/model/network.lua:27 +msgid "Connection attempt failed" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:40 +msgid "Connection attempt failed." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:411 +msgid "Connection lost" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:117 +msgid "Connections" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:377 +msgid "Consider the slave up when all ARP IP targets are reachable (all, 1)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:376 +msgid "Consider the slave up when any ARP IP target is reachable (any, 0)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontab.js:18 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:340 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:55 +msgid "Contents have been saved." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:742 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:132 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:264 +msgid "Continue" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4164 +msgid "" +"Could not regain access to the device after applying the configuration " +"changes. You might need to reconnect if you modified network related " +"settings such as the IP address or wireless security credentials." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:189 +msgid "Country" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:889 +msgid "Country Code" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:491 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1942 +msgid "Create / Assign firewall-zone" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:798 +msgid "Create interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:416 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:730 +msgid "Creates a bridge over specified interface(s)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:170 +msgid "Critical" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:174 +msgid "Cron Log Level" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:533 +msgid "Current power" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:568 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:570 +#: modules/luci-compat/luasrc/view/cbi/network_ifacelist.htm:51 +#: modules/luci-compat/luasrc/view/cbi/network_ifacelist.htm:53 +#: modules/luci-compat/luasrc/view/cbi/network_ifacelist.htm:82 +#: modules/luci-compat/luasrc/view/cbi/network_ifacelist.htm:83 +msgid "Custom Interface" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:36 +msgid "Custom delegated IPv6-prefix" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:382 +msgid "" +"Custom files (certificates, scripts) may remain on the system. To prevent " +"this, perform a factory-reset first." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/timer.js:6 +msgid "Custom flash interval (kernel: timer)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js:59 +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1353 +msgid "DAE-Client" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1358 +msgid "DAE-Port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1363 +msgid "DAE-Secret" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:327 +msgid "DHCP Server" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:155 +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:50 +msgid "DHCP and DNS" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:1982 +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:16 +#: modules/luci-compat/luasrc/model/network.lua:969 +msgid "DHCP client" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:619 +msgid "DHCP-Options" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_dhcpv6.lua:7 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:7 +msgid "DHCPv6 client" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:646 +msgid "DHCPv6-Mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:631 +msgid "DHCPv6-Service" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:45 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:46 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:47 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:48 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:49 +msgid "DNS" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:277 +msgid "DNS forwardings" +msgstr "" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:37 +msgid "DNS-Label / FQDN" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:228 +msgid "DNSSEC" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:232 +msgid "DNSSEC check unsigned" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:99 +msgid "DPD Idle Timeout" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:41 +msgid "DS-Lite AFTR address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:887 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:45 +msgid "DSL" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:14 +msgid "DSL Status" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:920 +msgid "DSL line mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1088 +msgid "DTIM Interval" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:57 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:58 +msgid "DUID" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:22 +msgid "Data Rate" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:165 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:176 +msgid "Debug" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1328 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1343 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1358 +msgid "Default %d" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:107 +msgid "Default Route" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:48 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:85 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:65 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:49 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:67 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:80 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:108 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:150 +msgid "Default gateway" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:646 +msgid "Default is stateless + stateful" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/default-on.js:11 +msgid "Default state" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:619 +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2237 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2662 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2666 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3154 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2872 +#: modules/luci-compat/luasrc/view/cbi/nsection.htm:11 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:162 +#: modules/luci-compat/luasrc/view/cbi/tsection.htm:16 +msgid "Delete" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:180 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:186 +msgid "Delete key" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2769 +msgid "Delete request failed: %s" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:847 +msgid "Delete this network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1088 +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:340 +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:134 +msgid "Description" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2868 +msgid "Deselect" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:220 +msgid "Design" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:384 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:70 +msgid "Destination" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:48 +msgid "Destination port" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:59 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:165 +msgid "Destination zone" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:67 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:191 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:43 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:45 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:80 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:55 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/netdev.js:12 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:247 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:280 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:356 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:392 +msgid "Device" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:861 +msgid "Device Configuration" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:132 +msgid "Device is not active" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:224 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:599 +msgid "Device is restarting…" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:45 +msgid "Device not managed by ModemManager." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4163 +msgid "Device unreachable!" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:53 +msgid "Device unreachable! Still waiting for device..." +msgstr "" + +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:88 +msgid "Diagnostics" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:101 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:93 +msgid "Dial number" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2665 +msgid "Directory" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:839 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:879 +msgid "Disable" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:579 +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:174 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:373 +msgid "Disable DNS lookups" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:93 +msgid "Disable Encryption" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1098 +msgid "Disable Inactivity Polling" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:837 +msgid "Disable this network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1608 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:66 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:107 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:99 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:51 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:95 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:82 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:56 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:69 +msgid "Disabled" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1112 +msgid "Disassociate On Low Acknowledgement" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:294 +msgid "Discard upstream RFC1918 responses" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:197 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:665 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:231 +msgid "Disconnect" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:64 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:22 +msgid "Disconnection attempt failed" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:48 +msgid "Disconnection attempt failed." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:606 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2861 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3309 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4045 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4134 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1688 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:330 +msgid "Dismiss" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:895 +msgid "Distance Optimization" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:895 +msgid "Distance to farthest network member in meters." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:155 +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:252 +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:79 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:84 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:81 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:86 +msgid "Do not create host route to peer (optional)." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:219 +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:214 +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:25 +msgid "Do not send a hostname" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2755 +msgid "Do you really want to delete \"%s\" ?" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:181 +msgid "Do you really want to delete the following SSH key?" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:94 +msgid "Do you really want to erase all settings?" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2753 +msgid "Do you really want to recursively delete the directory \"%s\" ?" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:168 +msgid "Domain required" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:307 +msgid "Domain whitelist" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:76 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:81 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:67 +msgid "Don't Fragment" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:169 +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:152 +msgid "Down" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:402 +msgid "Down Delay" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:366 +msgid "Download backup" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:404 +msgid "Download mtdblock" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:925 +msgid "Downstream SNR offset" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2620 +msgid "Drag to reorder" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:341 +msgid "Drop Duplicate Frames" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:12 +msgid "Dropbear Instance" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:10 +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:14 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:11 +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:595 +msgid "Dynamic DHCP" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:60 +msgid "Dynamic tunnel" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:595 +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:67 +msgid "EA-bits length" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1491 +msgid "EAP-Method" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2640 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2643 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3017 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:154 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:160 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:339 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:844 +msgid "Edit" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/error.htm:13 +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:842 +msgid "Edit this network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:793 +msgid "Edit wireless network" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:172 +msgid "Emergency" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:839 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:879 +msgid "Enable" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:462 +msgid "" +"Enable IGMP " +"snooping" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:460 +msgid "Enable STP" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:174 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:367 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:373 +msgid "Enable DNS lookups" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:292 +msgid "Enable Dynamic Shuffling Of Flows" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:60 +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:89 +msgid "Enable IPv6 negotiation" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:49 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:93 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:80 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:54 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:67 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:93 +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:192 +msgid "Enable Jumbo Frame passthrough" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:240 +msgid "Enable NTP client" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:96 +msgid "Enable Single DES" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:368 +msgid "Enable TFTP server" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:184 +msgid "Enable VLAN functionality" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1638 +msgid "Enable WPS pushbutton, requires WPA(2)-PSK/WPA3-SAE" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1634 +msgid "Enable key reinstallation (KRACK) countermeasures" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:187 +msgid "Enable learning and aging" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:198 +msgid "Enable mirroring of incoming packets" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:199 +msgid "Enable mirroring of outgoing packets" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:882 +msgid "" +"Enable packet steering across all CPUs. May help or hinder network speed." +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:80 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:75 +msgid "Enable rx checksum" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:76 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:81 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:67 +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:837 +msgid "Enable this network" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:84 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:79 +msgid "Enable tx checksum" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:243 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:352 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:66 +msgid "Enabled" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:462 +msgid "Enables IGMP snooping on this bridge" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1431 +msgid "" +"Enables fast roaming among access points that belong to the same Mobility " +"Domain" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:460 +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:59 +msgid "Encapsulation limit" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:915 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:973 +msgid "Encapsulation mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:159 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:183 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1117 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1666 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:45 +msgid "Encryption" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:161 +msgid "Endpoint Host" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:165 +msgid "Endpoint Port" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/dropdown.htm:16 +msgid "Enter custom value" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/dropdown.htm:16 +msgid "Enter custom values" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:97 +msgid "Erasing..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:102 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:103 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:104 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:105 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:106 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:169 +msgid "Error" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:30 +msgid "Errored seconds (ES)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2889 +#: modules/luci-compat/luasrc/model/network.lua:1433 +msgid "Ethernet Adapter" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2880 +#: modules/luci-compat/luasrc/model/network.lua:1423 +msgid "Ethernet Switch" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:270 +msgid "Every 30 seconds (slow, 0)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:271 +msgid "Every second (fast, 1)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:406 +msgid "Exclude interfaces" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:247 +msgid "Expand hosts" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:198 +msgid "Expecting a hexadecimal assignment hint" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:64 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:73 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:79 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:107 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:121 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:125 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:129 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:132 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:136 +msgid "Expecting: %s" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:48 +msgid "Expecting: non-empty value" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:50 +msgid "Expires" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:591 +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:19 +msgid "External" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1482 +msgid "External R0 Key Holder List" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1486 +msgid "External R1 Key Holder List" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:146 +msgid "External system log server" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:151 +msgid "External system log server port" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:156 +msgid "External system log server protocol" +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:79 +msgid "Extra SSH command options" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:83 +msgid "Extra pppd options" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:81 +msgid "Extra sstpc options" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1456 +msgid "FT over DS" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1457 +msgid "FT over the Air" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1454 +msgid "FT protocol" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:87 +msgid "Failed to change the system password." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4122 +msgid "Failed to confirm apply within %ds, waiting for rollback…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:37 +msgid "Failed to execute \"/etc/init.d/%s %s\" action: %s" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2673 +msgid "File" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2620 +msgid "File not accessible" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2811 +msgid "Filename" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:381 +msgid "Filename of the boot image advertised to clients" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:191 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:314 +msgid "Filesystem" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:213 +msgid "Filter private" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:218 +msgid "Filter useless" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:388 +msgid "Filtering for all slaves, no validation" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:389 +msgid "Filtering for all slaves, validation only for active slave" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:390 +msgid "Filtering for all slaves, validation only for backup slaves" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:65 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:23 +msgid "Finalizing failed" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:150 +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:820 +msgid "Find and join network" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/delegator.htm:9 +msgid "Finish" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:15 +msgid "Firewall" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:102 +msgid "Firewall Mark" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:326 +msgid "Firewall Settings" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:297 +msgid "Firewall Status" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:932 +msgid "Firmware File" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:57 +msgid "Firmware Version" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:327 +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:283 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:421 +msgid "Flash image..." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:279 +msgid "Flash image?" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:411 +msgid "Flash new firmware image" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:356 +msgid "Flash operations" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:288 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:290 +msgid "Flashing…" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:598 +msgid "Force" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:907 +msgid "Force 40MHz mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1158 +msgid "Force CCMP (AES)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:598 +msgid "Force DHCP on this network even if another server is detected." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1159 +msgid "Force TKIP" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1160 +msgid "Force TKIP and CCMP (AES)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:864 +msgid "Force link" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:255 +msgid "Force upgrade" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:90 +msgid "Force use of NAT-T" +msgstr "" + +#: modules/luci-base/luasrc/view/csrftoken.htm:8 +msgid "Form token mismatch" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:164 +msgid "Forward DHCP traffic" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:29 +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:161 +msgid "Forward broadcast traffic" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:934 +msgid "Forward mesh peer traffic" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:980 +msgid "Forwarding mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:899 +msgid "Fragmentation Threshold" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:115 +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.com." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:128 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:184 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:62 +msgid "GHz" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:91 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:77 +msgid "GPRS only" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:10 +msgid "GRE tunnel over IPv4" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:10 +msgid "GRE tunnel over IPv6" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:10 +msgid "GRETAP tunnel over IPv4" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:10 +msgid "GRETAP tunnel over IPv6" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:44 +msgid "Gateway" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:36 +msgid "Gateway Ports" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:11 +#: modules/luci-compat/luasrc/model/network.lua:29 +msgid "Gateway address is invalid" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:124 +msgid "Gateway metric" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:161 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:323 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:24 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:240 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:108 +msgid "General Settings" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:552 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:967 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:865 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:921 +msgid "General Setup" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:150 +msgid "Generate Config" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:66 +msgid "Generate Key" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1460 +msgid "Generate PMK locally" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:368 +msgid "Generate archive" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:79 +msgid "Given password confirmation did not match, password not changed!" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:146 +msgid "Global Settings" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:875 +msgid "Global network options" +msgstr "" + +#: themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm:57 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:215 +#: themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm:58 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:82 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:284 +msgid "Go to password configuration..." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2562 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3336 +#: modules/luci-compat/luasrc/view/cbi/full_valueheader.htm:4 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:58 +msgid "Go to relevant configuration page" +msgstr "" + +#: modules/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json:33 +msgid "Grant access to DHCP configuration" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:102 +msgid "Grant access to DHCP status display" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:111 +msgid "Grant access to DSL status display" +msgstr "" + +#: protocols/luci-proto-openconnect/root/usr/share/rpcd/acl.d/luci-openconnect.json:3 +msgid "Grant access to LuCI OpenConnect procedures" +msgstr "" + +#: protocols/luci-proto-wireguard/root/usr/share/rpcd/acl.d/luci-wireguard.json:3 +msgid "Grant access to LuCI Wireguard procedures" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:19 +msgid "Grant access to SSH configuration" +msgstr "" + +#: modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json:12 +msgid "Grant access to basic LuCI procedures" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:64 +msgid "Grant access to crontab configuration" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:60 +msgid "Grant access to firewall status" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:116 +msgid "Grant access to flash operations" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:86 +msgid "Grant access to main status display" +msgstr "" + +#: protocols/luci-proto-modemmanager/root/usr/share/rpcd/acl.d/luci-proto-modemmanager.json:3 +msgid "Grant access to mmcli" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:84 +msgid "Grant access to mount configuration" +msgstr "" + +#: modules/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json:3 +msgid "Grant access to network configuration" +msgstr "" + +#: modules/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json:46 +msgid "Grant access to network diagnostic tools" +msgstr "" + +#: modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json:36 +msgid "Grant access to network status information" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:13 +msgid "Grant access to process status" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:3 +msgid "Grant access to realtime statistics" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:42 +msgid "Grant access to startup configuration" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json:3 +msgid "Grant access to system configuration" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:30 +msgid "Grant access to system logs" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:47 +msgid "Grant access to the system route status" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json:120 +msgid "Grant access to wireless status display" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:66 +msgid "Group Password" +msgstr "" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:22 +msgid "Guest" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:81 +msgid "HE.net password" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:73 +msgid "HE.net username" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:46 +msgid "Hang Up" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:34 +msgid "Header Error Code Errors (HEC)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/heartbeat.js:5 +msgid "Heartbeat interval (kernel: heartbeat)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:100 +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1066 +msgid "Hide ESSID" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:264 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:303 +msgid "Hide empty chains" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:55 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2070 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:56 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:140 +msgid "Host" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js:22 +msgid "Host entries" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:171 +msgid "Host expiry timeout" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:31 +msgid "Host-IP or Network" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:102 +msgid "Host-Uniq tag content" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:36 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:419 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js:27 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:54 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:29 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:121 +msgid "Hostname" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:22 +msgid "Hostname to send when requesting DHCP" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js:20 +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:63 +msgid "Hostnames" +msgstr "" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:24 +msgid "Hybrid" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:53 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:48 +msgid "ID used to uniquely identify the VXLAN" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:206 +msgid "IEEE 802.3ad Dynamic link aggregation (802.3ad, 4)" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:75 +msgid "IKE DH Group" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:83 +msgid "IP Addresses" +msgstr "" + +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:80 +msgid "IP Protocol" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:114 +msgid "IP Type" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js:31 +msgid "IP address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:10 +#: modules/luci-compat/luasrc/model/network.lua:28 +msgid "IP address is invalid" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:13 +#: modules/luci-compat/luasrc/model/network.lua:31 +msgid "IP address is missing" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:79 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:102 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:85 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:86 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:87 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:88 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:89 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:82 +msgid "IPv4" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:316 +msgid "IPv4 Firewall" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:29 +msgid "IPv4 Upstream" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:178 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:162 +msgid "IPv4 address" +msgstr "" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:33 +msgid "IPv4 assignment length" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:181 +msgid "IPv4 broadcast" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:180 +msgid "IPv4 gateway" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:179 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:168 +msgid "IPv4 netmask" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:291 +msgid "IPv4 network in address/netmask notation" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:116 +msgid "IPv4 only" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:52 +msgid "IPv4 prefix" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:61 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:55 +msgid "IPv4 prefix length" +msgstr "" + +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:83 +msgid "IPv4+IPv6" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:37 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:30 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:154 +msgid "IPv4-Address" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:164 +msgid "IPv4-Gateway" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ipip.lua:9 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:10 +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:115 +msgid "IPv4/IPv6 (both - defaults to IPv4)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:80 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:103 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:90 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:91 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:92 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:93 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:94 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:95 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:96 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:97 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:98 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:99 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:84 +msgid "IPv6" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:319 +msgid "IPv6 Firewall" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:203 +msgid "IPv6 Neighbours" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:554 +msgid "IPv6 Settings" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:879 +msgid "IPv6 ULA-Prefix" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:29 +msgid "IPv6 Upstream" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:205 +msgid "IPv6 address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:189 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:31 +msgid "IPv6 assignment hint" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:184 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:27 +msgid "IPv6 assignment length" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:210 +msgid "IPv6 gateway" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:296 +msgid "IPv6 network in address/netmask notation" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:117 +msgid "IPv6 only" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:53 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:59 +msgid "IPv6 prefix" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:57 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:63 +msgid "IPv6 prefix length" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:214 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:57 +msgid "IPv6 routed prefix" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:218 +msgid "IPv6 suffix" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:51 +msgid "IPv6 support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:56 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:57 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:172 +msgid "IPv6-Address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:100 +msgid "IPv6-PD" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_6x4.lua:13 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:10 +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_6x4.lua:17 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:9 +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_6x4.lua:15 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:9 +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1593 +msgid "Identity" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:96 +msgid "If checked, 1DES is enabled" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:51 +msgid "If checked, adds \"+ipv6\" to the pppd options" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:93 +msgid "If checked, encryption is disabled" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:254 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:360 +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:267 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:376 +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:37 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:116 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:48 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:85 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:65 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:49 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:33 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:67 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:80 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:108 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:150 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:64 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:56 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:100 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:87 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:61 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:74 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:97 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:61 +msgid "If unchecked, no default route is configured" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:40 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:124 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:39 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:116 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:68 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:59 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:103 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:90 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:64 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:77 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:100 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:69 +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:339 +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:197 +msgid "Ignore /etc/hosts" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:579 +msgid "Ignore interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:185 +msgid "Ignore resolve file" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:419 +msgid "Image" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:67 +msgid "In" +msgstr "" + +#: modules/luci-base/luasrc/view/csrftoken.htm:13 +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:157 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:141 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:128 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:106 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:115 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:138 +msgid "Inactivity timeout" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:265 +msgid "Inbound:" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:90 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:95 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:97 +msgid "Incoming checksum" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:82 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:87 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:84 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:89 +msgid "Incoming key" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Incoming serialization" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:166 +msgid "Info" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:101 +msgid "Information" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:67 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:25 +msgid "Initialization failure" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:77 +msgid "Initscript" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:111 +msgid "Initscripts" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1577 +msgid "Inner certificate constraint (Domain)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1574 +msgid "Inner certificate constraint (SAN)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1571 +msgid "Inner certificate constraint (Subject)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1580 +msgid "Inner certificate constraint (Wildcard)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:268 +msgid "Install protocol extensions..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1938 +msgid "" +"Instead of joining any network with a matching SSID, only connect to the " +"BSSID %h." +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/map.htm:43 +msgid "Insufficient permissions to read UCI configuration." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:464 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:471 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:735 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:739 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:27 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:156 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:174 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:17 +msgid "Interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:62 +msgid "Interface %q device auto-migrated from %q to %q." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:917 +msgid "Interface Configuration" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:110 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:151 +msgid "Interface has %d pending changes" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:92 +msgid "Interface is disabled" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:64 +msgid "Interface is marked for deletion" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:209 +msgid "Interface is reconnecting..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:193 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:203 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:209 +msgid "Interface is shutting down..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:253 +msgid "Interface is starting..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:256 +msgid "Interface is stopping..." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1079 +msgid "Interface name" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:122 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:272 +msgid "Interface not present or not connected yet." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:308 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:335 +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:38 +msgid "Interfaces" +msgstr "" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:20 +msgid "Internal" +msgstr "" + +#: modules/luci-base/luasrc/view/error500.htm:8 +msgid "Internal Server Error" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:283 +msgid "Interval For Sending Learning Packets" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:192 +#: modules/luci-compat/luasrc/view/cbi/tsection.htm:42 +msgid "Invalid" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:19 +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:22 +msgid "Invalid Base64 key string" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:285 +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:294 +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:403 +msgid "Invalid argument" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:46 +msgid "" +"Invalid bearer list. Possibly too many bearers created. This protocol " +"supports one and only one bearer." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:402 +msgid "Invalid command" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:106 +msgid "Invalid hexadecimal value" +msgstr "" + +#: modules/luci-base/luasrc/view/sysauth.htm:12 +msgid "Invalid username and/or password! Please try again." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:71 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:76 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:76 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:81 +msgid "Invalid value" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1075 +msgid "Isolate Clients" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:231 +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" + +#: themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm:64 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:222 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:72 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:291 +msgid "JavaScript required!" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1746 +msgid "Join Network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1680 +msgid "Join Network: Wireless Scan" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1946 +msgid "Joining Network: %q" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:223 +msgid "Keep settings and retain the current configuration" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/dmesg.js:20 +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:51 +msgid "Kernel Log" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:58 +msgid "Kernel Version" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1369 +msgid "Key" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1397 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1398 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1399 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1400 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1412 +msgid "Key #%d" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:82 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:87 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:84 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:89 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:86 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:91 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:88 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:93 +msgid "Key for outgoing packets (optinal)." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 +msgid "Kill" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ppp.lua:21 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:10 +msgid "L2TP" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:40 +msgid "L2TP Server" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:267 +msgid "LACPDU Packets" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:131 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:115 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:102 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:76 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:89 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:112 +msgid "LCP echo failure threshold" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:144 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:128 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:115 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:89 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:102 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:125 +msgid "LCP echo interval" +msgstr "" + +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:101 +msgid "LED Configuration" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:974 +msgid "LLC" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:267 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:376 +msgid "Label" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:209 +msgid "Language" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:111 +msgid "Language and Style" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:24 +msgid "Latency" +msgstr "" + +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:21 +msgid "Leaf" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:495 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:591 +msgid "Lease time" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:39 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:58 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:32 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:59 +msgid "Lease time remaining" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:181 +msgid "Leasefile" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:41 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:47 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:50 +msgid "Leave empty to autodetect" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:40 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:39 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:39 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:45 +msgid "Leave empty to use the current WAN address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4030 +msgid "Legend:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:586 +msgid "Limit" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:389 +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:402 +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:25 +msgid "Line Attenuation (LATN)" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:18 +msgid "Line Mode" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:17 +msgid "Line State" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:19 +msgid "Line Uptime" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:123 +msgid "Link Aggregation (Channel Bonding)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:348 +msgid "Link Monitoring" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/netdev.js:23 +msgid "Link On" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:278 +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1482 +msgid "" +"List of R0KHs in the same Mobility Domain.
Format: MAC-address,NAS-" +"Identifier,128-bit key as hex string.
This list is used to map R0KH-ID " +"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key " +"from the R0KH that the STA used during the Initial Mobility Domain " +"Association." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1486 +msgid "" +"List of R1KHs in the same Mobility Domain.
Format: MAC-address,R1KH-ID " +"as 6 octets with colons,128-bit key as hex string.
This list is used " +"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the " +"R0KH. This is also the list of authorized R1KHs in the MD that can request " +"PMK-R1 keys." +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:82 +msgid "List of SSH key files for auth" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:308 +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:286 +msgid "List of domains to force to an IP address." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:267 +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:401 +msgid "Listen Interfaces" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:78 +msgid "Listen Port" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:17 +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:318 +msgid "Listening port for inbound DNS queries" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:87 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:54 +msgid "Load" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:61 +msgid "Load Average" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2938 +msgid "Loading directory contents…" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:1948 +#: modules/luci-base/luasrc/view/view.htm:4 +#: modules/luci-mod-status/luasrc/view/admin_status/index.htm:12 +msgid "Loading view…" +msgstr "" + +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:77 +msgid "Local IP address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:12 +#: modules/luci-compat/luasrc/model/network.lua:30 +msgid "Local IP address is invalid" +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:86 +msgid "Local IP address to assign" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:46 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:46 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:44 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:40 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:39 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:39 +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:151 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:44 +msgid "Local IPv4 address" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:46 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:46 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:54 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:45 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:44 +msgid "Local IPv6 address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:388 +msgid "Local Service Only" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:115 +msgid "Local Startup" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:59 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:117 +msgid "Local Time" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:243 +msgid "Local domain" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:240 +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:244 +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:239 +msgid "Local server" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:224 +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:223 +msgid "Localise queries" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1938 +msgid "Lock to BSSID" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:164 +msgid "Log output level" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:274 +msgid "Log queries" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:109 +msgid "Logging" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:50 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:50 +msgid "" +"Logical network from which to select the local endpoint if local IPv6 " +"address is empty and no WAN IPv6 is available (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:50 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:55 +msgid "Logical network to which the tunnel will be added (bridged) (optional)." +msgstr "" + +#: modules/luci-base/luasrc/view/sysauth.htm:38 +msgid "Login" +msgstr "" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:81 +msgid "Logout" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:32 +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:581 +msgid "Lowest leased address as offset from the network address." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:47 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:82 +msgid "MAC" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:251 +msgid "MAC Address For The Actor" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:38 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2069 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:56 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:31 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:139 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:155 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:173 +msgid "MAC-Address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1011 +msgid "MAC-Address Filter" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:923 +msgid "MAC-Filter" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1018 +msgid "MAC-List" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:16 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:13 +msgid "MAP / LW4over6" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:62 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:7 +msgid "MAP rule is invalid" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:321 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:322 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:323 +msgid "MBit/s" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:218 +msgid "MD5" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:199 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:71 +msgid "MHz" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:353 +msgid "MII" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:421 +msgid "MII / ETHTOOL ioctls" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:394 +msgid "MII Interval" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:54 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:53 +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:97 +msgid "MTU" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:302 +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:108 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:100 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:52 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:96 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:83 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:57 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:70 +msgid "Manual" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:3664 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:642 +msgid "Master" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:23 +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1107 +msgid "Maximum allowed Listen Interval" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:336 +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:354 +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:345 +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:112 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:104 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:93 +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:586 +msgid "Maximum number of leased addresses." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:886 +msgid "Maximum transmit power" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:129 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:188 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:199 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:63 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:71 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:327 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:328 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:329 +msgid "Mbit/s" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:35 +msgid "Medium" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:24 +msgid "Memory" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:73 +msgid "Memory usage (%)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:3667 +msgid "Mesh" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:156 +msgid "Mesh ID" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:931 +msgid "Mesh Id" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:404 +msgid "Method not found" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:349 +msgid "Method of link monitoring" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:418 +msgid "Method to determine link status" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:46 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:165 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:183 +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:92 +msgid "Metric" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:235 +msgid "Minimum Number of Links" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:202 +msgid "Mirror monitor port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:201 +msgid "Mirror source port" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_modemmanager.lua:9 +msgid "Mobile Data" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1442 +msgid "Mobility Domain" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/wireless_modefreq.htm:154 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:157 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:180 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:442 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:926 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1664 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:43 +msgid "Mode" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:55 +msgid "Model" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:43 +msgid "Modem bearer teardown in progress." +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:42 +msgid "" +"Modem connection in progress. Please wait. This process will timeout after 2 " +"minutes." +msgstr "" + +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:72 +msgid "Modem default" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:73 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:82 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:61 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:73 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:57 +msgid "Modem device" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:41 +msgid "Modem disconnection in progress. Please wait." +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:66 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:24 +msgid "Modem information query failed" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:112 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:104 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:93 +msgid "Modem init timeout" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:44 +msgid "Modem is disabled." +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:52 +msgid "ModemManager" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:3668 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1005 +msgid "Monitor" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:31 +msgid "More Characters" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2504 +msgid "More…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:192 +msgid "Mount Point" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:144 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:228 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:88 +msgid "Mount Points" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:229 +msgid "Mount Points - Mount Entry" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:340 +msgid "Mount Points - Swap Entry" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:228 +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:154 +msgid "Mount attached devices" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:162 +msgid "Mount filesystems not specifically configured" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:331 +msgid "Mount options" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:292 +msgid "Mount point" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:158 +msgid "Mount swap not specifically configured" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:223 +msgid "Mounted file systems" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:152 +msgid "Move down" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:151 +msgid "Move up" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1437 +msgid "NAS ID" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:87 +msgid "NAT-T Mode" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:41 +msgid "NAT64 Prefix" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:26 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:31 +msgid "NCM" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:637 +msgid "NDP-Proxy" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:72 +msgid "NT Domain" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:274 +msgid "NTP server candidates" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2542 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3785 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:27 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:710 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js:67 +msgid "Name" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1916 +msgid "Name of the new network" +msgstr "" + +#: themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm:40 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:50 +msgid "Navigation" +msgstr "" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:45 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:959 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2068 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:381 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:63 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:138 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:162 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:180 +msgid "Network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:68 +msgid "Network Utilities" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:380 +msgid "Network boot image" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/netdev.js:7 +msgid "Network device activity (kernel: netdev)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:15 +#: modules/luci-compat/luasrc/model/network.lua:33 +msgid "Network device is not present" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:50 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:55 +msgid "Network interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:777 +msgid "New interface for \"%s\" can not be created: %s" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:713 +msgid "New interface name…" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/delegator.htm:11 +msgid "Next »" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:3643 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:296 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:345 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:108 +msgid "No" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:562 +msgid "No DHCP Server configured for this interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1310 +msgid "No Encryption" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:87 +msgid "No Host Routes" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:89 +msgid "No NAT-T" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:79 +msgid "No RX signal" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:69 +msgid "No client associated" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:406 +msgid "No data received" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2878 +msgid "No entries in this directory" +msgstr "" + +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:82 +msgid "No files found" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:79 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:84 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:81 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:86 +msgid "No host route" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:674 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:142 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:241 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:59 +msgid "No information available" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:63 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:8 +msgid "No matching prefix delegation" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:140 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:143 +msgid "No more slaves available" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:187 +msgid "No more slaves available, can not save interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:251 +msgid "No negative cache" +msgstr "" + +#: themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm:54 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:212 +#: themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm:55 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:79 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:279 +msgid "No password set!" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:130 +msgid "No peers defined yet" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:121 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:268 +msgid "No public keys present yet." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:90 +msgid "No rules in this chain." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:384 +msgid "No validation or filtering" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:152 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:825 +msgid "No zone assigned" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:58 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:84 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:187 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:141 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:174 +msgid "Noise" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:27 +msgid "Noise Margin (SNR)" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:270 +msgid "Noise:" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:35 +msgid "Non Pre-emptive CRC errors (CRC_P)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:394 +msgid "Non-wildcard" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:159 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:183 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:100 +msgid "None" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:177 +msgid "Normal" +msgstr "" + +#: modules/luci-base/luasrc/view/error404.htm:8 +msgid "Not Found" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:75 +msgid "Not associated" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:32 +msgid "Not connected" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:45 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:80 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:120 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:146 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:280 +msgid "Not present" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:101 +msgid "Not started on boot" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:409 +msgid "Not supported" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:167 +msgid "Notice" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:127 +msgid "Nslookup" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:332 +msgid "Number of IGMP membership reports" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:362 +msgid "Number of cached DNS entries (max is 10000, 0 is no caching)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:199 +msgid "Number of parallel threads used for compression" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:309 +msgid "Number of peer notifications after failover event" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:69 +msgid "Obfuscated Group Password" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:61 +msgid "Obfuscated Password" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:105 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:97 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:49 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:93 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:80 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:54 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:67 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:93 +msgid "Obtain IPv6-Address" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/default-on.js:18 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:351 +msgid "Off" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/timer.js:15 +msgid "Off-State Delay" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/default-on.js:18 +msgid "On" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:96 +msgid "On-Link route" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/timer.js:11 +msgid "On-State Delay" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:484 +msgid "One of hostname or mac address must be specified!" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:466 +msgid "One of the following: %s" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/nullsection.htm:17 +#: modules/luci-compat/luasrc/view/cbi/ucisection.htm:22 +msgid "One or more fields contain invalid values!" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/map.htm:32 +msgid "One or more invalid/required values on tab" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/nullsection.htm:19 +#: modules/luci-compat/luasrc/view/cbi/ucisection.htm:24 +msgid "One or more required fields have no value!" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:229 +msgid "" +"Only if current active slave fails and the primary slave is up (failure, 2)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:444 +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:19 +msgid "Open list..." +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_openconnect.lua:9 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:64 +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:12 +msgid "OpenFortivpn" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:882 +msgid "Operating frequency" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:1971 +#: modules/luci-base/htdocs/luci-static/resources/form.js:3653 +msgid "Option \"%s\" contains an invalid input value." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:1984 +msgid "Option \"%s\" must not be empty." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4037 +msgid "Option changed" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4039 +msgid "Option removed" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1609 +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:92 +msgid "Optional" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:102 +msgid "" +"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " +"starting with 0x." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:218 +msgid "" +"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or " +"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating " +"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') " +"for the interface." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:143 +msgid "" +"Optional. Base64-encoded preshared key. Adds in an additional layer of " +"symmetric-key cryptography for post-quantum resistance." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:159 +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:134 +msgid "Optional. Description of peer." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:87 +msgid "Optional. Do not create host routes to peers." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:161 +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:97 +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:165 +msgid "Optional. Port of peer." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:169 +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:78 +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:71 +msgid "Options" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:346 +msgid "Other:" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:68 +msgid "Out" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:275 +msgid "Outbound:" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:91 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:93 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:98 +msgid "Outgoing checksum" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:86 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:91 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:88 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:93 +msgid "Outgoing key" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:93 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:95 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:100 +msgid "Outgoing serialization" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:50 +msgid "Output Interface" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:59 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:165 +msgid "Output zone" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:57 +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:222 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:40 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:50 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:76 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:71 +msgid "Override MAC address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:61 +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:226 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:57 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:62 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:62 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:67 +#: protocols/luci-proto-hnet/htdocs/luci-static/resources/protocol/hnet.js:44 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:53 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:54 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:120 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:158 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:71 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:145 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:132 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:110 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:119 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:97 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:77 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:62 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:57 +msgid "Override MTU" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:67 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:72 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:63 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:72 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:67 +msgid "Override TOS" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:62 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:67 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:67 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:72 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:58 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:67 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:62 +msgid "Override TTL" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1079 +msgid "Override default interface name" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:167 +msgid "Override the gateway in DHCP responses" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:603 +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:179 +msgid "Override the table used for internal routes" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:3 +msgid "Overview" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2721 +msgid "Overwrite existing file \"%s\" ?" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:70 +msgid "Owner" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:97 +msgid "PAP/CHAP (both)" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:98 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:108 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:90 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:45 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:89 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:76 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:44 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:63 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:82 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:46 +msgid "PAP/CHAP password" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:96 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:103 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:88 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:43 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:87 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:74 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:42 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:61 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:77 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:44 +msgid "PAP/CHAP username" +msgstr "" + +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:101 +msgid "PDP Type" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:69 +msgid "PID" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:95 +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:94 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:87 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:68 +msgid "PIN" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:21 +#: modules/luci-compat/luasrc/model/network.lua:39 +msgid "PIN code rejected" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1477 +msgid "PMK R1 Push" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ppp.lua:13 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:43 +msgid "PPP" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:58 +msgid "PPPoA Encapsulation" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ppp.lua:19 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:28 +msgid "PPPoATM" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ppp.lua:17 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:28 +msgid "PPPoE" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_pppossh.lua:9 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:28 +msgid "PPPoSSH" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ppp.lua:15 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:28 +msgid "PPtP" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:73 +msgid "PSID offset" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:70 +msgid "PSID-bits length" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:918 +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:882 +msgid "Packet Steering" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:53 +msgid "Packets" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:275 +msgid "Packets To Transmit Before Moving To Next Slave" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:152 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:825 +msgid "Part of zone %q" +msgstr "" + +#: modules/luci-base/luasrc/view/sysauth.htm:29 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1599 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:51 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:108 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:52 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:58 +msgid "Password" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:25 +msgid "Password authentication" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1531 +msgid "Password of Private Key" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1589 +msgid "Password of inner Private Key" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:31 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:33 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:35 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:37 +msgid "Password strength" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:111 +msgid "Password2" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:239 +msgid "Paste or drag SSH key file…" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1510 +msgid "Path to CA-Certificate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1525 +msgid "Path to Client-Certificate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1528 +msgid "Path to Private Key" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1568 +msgid "Path to inner CA-Certificate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1583 +msgid "Path to inner Client-Certificate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1586 +msgid "Path to inner Private Key" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2731 +msgid "Paused" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:271 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/bandwidth.js:281 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:332 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:342 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:352 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:237 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:247 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/load.js:257 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:266 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:276 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:294 +msgid "Peak:" +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:89 +msgid "Peer IP address to assign" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:14 +#: modules/luci-compat/luasrc/model/network.lua:32 +msgid "Peer address is missing" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:115 +msgid "Peers" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:80 +msgid "Perfect Forward Secrecy" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:93 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:95 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:100 +msgid "Perform outgoing packets serialization (optional)." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:34 +msgid "Perform reboot" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:378 +msgid "Perform reset" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:407 +msgid "Permission denied" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:169 +msgid "Persistent Keep Alive" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:288 +msgid "Phy Rate:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:325 +msgid "Physical Settings" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:79 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:80 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:90 +msgid "Ping" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:48 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:49 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:83 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:84 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:138 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:63 +msgid "Pkts." +msgstr "" + +#: modules/luci-base/luasrc/view/sysauth.htm:19 +msgid "Please enter your username and password." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3768 +msgid "Please select the file to upload." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:53 +msgid "Policy" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:21 +msgid "Port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:278 +msgid "Port status:" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:492 +msgid "Potential negation of: %s" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:38 +msgid "Power Management Mode" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:36 +msgid "Pre-emptive CRC errors (CRCP_P)" +msgstr "" + +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:73 +msgid "Prefer LTE" +msgstr "" + +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:74 +msgid "Prefer UMTS" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:33 +msgid "Prefix Delegated" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:143 +msgid "Preshared Key" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:131 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:115 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:102 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:76 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:89 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:112 +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:407 +msgid "Prevent listening on these interfaces." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1075 +msgid "Prevents client-to-client communication" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:211 +msgid "Primary Slave" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:228 +msgid "" +"Primary becomes active slave when it comes back up if speed and duplex " +"better than current slave (better, 1)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:227 +msgid "Primary becomes active slave whenever it comes back up (always, 0)" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:61 +msgid "Private Key" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:64 +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:63 +msgid "Processes" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:21 +msgid "Profile" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:66 +msgid "Prot." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:79 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:397 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:727 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:382 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:32 +msgid "Protocol" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:265 +msgid "Provide NTP server" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:825 +msgid "Provide new network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1004 +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:139 +msgid "Public Key" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:275 +msgid "" +"Public keys allow for the passwordless SSH logins with a higher security " +"compared to the use of plain passwords. In order to upload a new key to the " +"device, paste an OpenSSH compatible public key line or drag a .pub file into the input field." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:214 +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_qmi.lua:9 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:27 +msgid "QMI Cellular" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:41 +msgid "Quality" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:264 +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1465 +msgid "R0 Key Lifetime" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1471 +msgid "R1 Key Holder" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:88 +msgid "RFC3947 NAT-T mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:939 +msgid "RSSI threshold for joining" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:903 +msgid "RTS/CTS Threshold" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:48 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:83 +msgid "RX" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:142 +msgid "RX Rate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2072 +msgid "RX Rate / TX Rate" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1343 +msgid "Radius-Accounting-Port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1348 +msgid "Radius-Accounting-Secret" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1338 +msgid "Radius-Accounting-Server" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1328 +msgid "Radius-Authentication-Port" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1333 +msgid "Radius-Authentication-Secret" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1323 +msgid "Radius-Authentication-Server" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:102 +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:178 +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:402 +msgid "Really switch protocol?" +msgstr "" + +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:75 +msgid "Realtime Graphs" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1448 +msgid "Reassociation Deadline" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:293 +msgid "Rebind protection" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:20 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:126 +msgid "Reboot" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:153 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:162 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:46 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:51 +msgid "Rebooting…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:21 +msgid "Reboots the operating system of your device" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/netdev.js:25 +msgid "Receive" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:83 +msgid "Recommended. IP addresses of the WireGuard interface." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:348 +msgid "Reconnect this interface" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:56 +msgid "References" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2725 +msgid "Refreshing" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_relay.lua:153 +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:39 +msgid "Relay" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_relay.lua:157 +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:36 +msgid "Relay Bridge" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:154 +msgid "Relay between networks" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_relay.lua:12 +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:64 +msgid "Relay bridge" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:50 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:49 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:40 +msgid "Remote IPv4 address" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:42 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:42 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:40 +msgid "Remote IPv4 address or FQDN" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:40 +msgid "Remote IPv6 address" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:42 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:42 +msgid "Remote IPv6 address or FQDN" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:849 +msgid "Remove" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1914 +msgid "Replace wireless configuration" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:17 +msgid "Request IPv6-address" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:23 +msgid "Request IPv6-prefix of length" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:408 +msgid "Request timeout" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:90 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:95 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:97 +msgid "Require incoming checksum (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Require incoming packets serialization (optional)." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1610 +msgid "Required" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:34 +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:61 +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:139 +msgid "Required. Base64-encoded public key of peer." +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:148 +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1239 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1240 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1241 +msgid "Requires hostapd" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1246 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1247 +msgid "Requires hostapd with EAP Suite-B support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1244 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1245 +msgid "Requires hostapd with EAP support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1248 +msgid "Requires hostapd with OWE support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1242 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1243 +msgid "Requires hostapd with SAE support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1237 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1238 +msgid "Requires hostapd with WEP support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1607 +msgid "" +"Requires the 'full' version of wpad/hostapd and support from the wifi driver " +"
(as of Jan 2019: ath9k, ath10k, mwlwifi and mt76)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:233 +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1253 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1254 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1255 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1267 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1268 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1269 +msgid "Requires wpa-supplicant" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1260 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1261 +msgid "Requires wpa-supplicant with EAP Suite-B support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1258 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1259 +msgid "Requires wpa-supplicant with EAP support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1262 +msgid "Requires wpa-supplicant with OWE support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1256 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1257 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1272 +msgid "Requires wpa-supplicant with SAE support" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1251 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1252 +msgid "Requires wpa-supplicant with WEP support" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:224 +msgid "Reselection policy for primary slave" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2203 +#: modules/luci-base/luasrc/view/sysauth.htm:39 +#: modules/luci-compat/luasrc/view/cbi/delegator.htm:17 +#: modules/luci-compat/luasrc/view/cbi/footer.htm:30 +#: modules/luci-compat/luasrc/view/cbi/simpleform.htm:66 +msgid "Reset" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:308 +msgid "Reset Counters" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:376 +msgid "Reset to defaults" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:162 +msgid "Resolv and Hosts Files" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:188 +msgid "Resolve file" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:405 +msgid "Resource not found" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:350 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:817 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:100 +msgid "Restart" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:313 +msgid "Restart Firewall" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:815 +msgid "Restart radio interface" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:372 +msgid "Restore" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:382 +msgid "Restore backup" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:371 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:372 +msgid "Reveal/hide password" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4053 +msgid "Revert" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4138 +msgid "Revert changes" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4320 +msgid "Revert request failed with status %h" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4300 +msgid "Reverting configuration…" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:372 +msgid "Root directory for files served via TFTP" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:297 +msgid "Root preparation" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:202 +msgid "Round-Robin policy (balance-rr, 0)" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:159 +msgid "Route Allowed IPs" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:73 +msgid "Route table" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:60 +msgid "Route type" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:625 +msgid "Router Advertisement-Service" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:46 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:26 +msgid "Router Password" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:15 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:194 +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:27 +msgid "Routes" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:15 +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:206 +msgid "Rule" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:335 +msgid "Run a filesystem check before mounting the device" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:335 +msgid "Run filesystem check" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2364 +msgid "Runtime error" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:219 +msgid "SHA256" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:59 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:175 +msgid "SNR" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/dropbear.js:10 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:38 +msgid "SSH Access" +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:70 +msgid "SSH server address" +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:74 +msgid "SSH server port" +msgstr "" + +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:58 +msgid "SSH username" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:274 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:51 +msgid "SSH-Keys" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:156 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:181 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1662 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:42 +msgid "SSID" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:9 +msgid "SSTP" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:41 +msgid "SSTP Server" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:339 +msgid "SWAP" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2866 +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2198 +#: modules/luci-compat/luasrc/view/cbi/error.htm:17 +#: modules/luci-compat/luasrc/view/cbi/footer.htm:26 +#: modules/luci-compat/luasrc/view/cbi/header.htm:20 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:435 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:123 +msgid "Save" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2180 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4049 +#: modules/luci-compat/luasrc/view/cbi/footer.htm:22 +msgid "Save & Apply" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:602 +msgid "Save error" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:406 +msgid "Save mtdblock" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:396 +msgid "Save mtdblock contents" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:822 +msgid "Scan" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontab.js:26 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:76 +msgid "Scheduled Tasks" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4033 +msgid "Section added" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4035 +msgid "Section removed" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:331 +msgid "See \"mount\" manpage for details" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:257 +msgid "" +"Select 'Force upgrade' to flash the image even if the image format check " +"fails. Use only if you are sure that the firmware is correct and meant for " +"your device!" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2622 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2762 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2927 +msgid "Select file…" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:318 +msgid "Selects the transmit hash policy to use for slave selection" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:144 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:128 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:115 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:89 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:102 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:125 +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:24 +msgid "Send the hostname of this device" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:157 +msgid "Server Settings" +msgstr "" + +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:50 +msgid "Service Name" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:87 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:71 +msgid "Service Type" +msgstr "" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:36 +msgid "Services" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2668 +msgid "Session expired" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:107 +msgid "Set VPN as Default Route" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:864 +msgid "" +"Set interface properties regardless of the link carrier (If set, carrier " +"sense events do not invoke hotplug handlers)." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:300 +msgid "Set same MAC Address to all slaves" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:642 +msgid "Set this interface as master for the dhcpv6 relay." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:304 +msgid "Set to currently active slave (active, 1)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:305 +msgid "Set to first slave added to the bond (follow, 2)" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_modemmanager.lua:55 +#: modules/luci-compat/luasrc/model/network/proto_qmi.lua:55 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:23 +msgid "Setting PLMN failed" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:68 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:26 +msgid "Setting operation mode failed" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:565 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:575 +msgid "Setup DHCP Server" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:31 +msgid "Severely Errored Seconds (SES)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:208 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:80 +msgid "Short GI" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1085 +msgid "Short Preamble" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:442 +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:18 +msgid "Show current backup file list" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:264 +msgid "Show empty chains" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:354 +msgid "Shutdown this interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:57 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:63 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:186 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1661 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:41 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:141 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:173 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:179 +msgid "Signal" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:2071 +msgid "Signal / Noise" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:26 +msgid "Signal Attenuation (SATN)" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:260 +msgid "Signal:" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3786 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:217 +msgid "Size" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:361 +msgid "Size of DNS query cache" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:187 +msgid "Size of the ZRam device in megabytes" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/footer.htm:18 +#: modules/luci-compat/luasrc/view/cbi/simpleform.htm:57 +msgid "Skip" +msgstr "" + +#: themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm:36 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:46 +msgid "Skip to content" +msgstr "" + +#: themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm:35 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:45 +msgid "Skip to navigation" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:178 +msgid "Slave Interfaces" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2883 +#: modules/luci-compat/luasrc/model/network.lua:1428 +msgid "Software VLAN" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/header.htm:5 +msgid "Some fields are invalid, cannot save values!" +msgstr "" + +#: modules/luci-base/luasrc/view/error404.htm:9 +msgid "Sorry, the object you requested was not found." +msgstr "" + +#: modules/luci-base/luasrc/view/error500.htm:9 +msgid "Sorry, the server encountered an unexpected error." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:414 +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:383 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:69 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:182 +msgid "Source" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:84 +msgid "Source Address" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:50 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:50 +msgid "Source interface" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:342 +msgid "" +"Specifies that duplicate frames (received on inactive ports) should be " +"dropped or delivered" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:358 +msgid "Specifies the ARP link monitoring frequency in milliseconds" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:366 +msgid "Specifies the IP addresses to use for ARP monitoring" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:395 +msgid "Specifies the MII link monitoring frequency in milliseconds" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:259 +msgid "Specifies the aggregation selection logic to use" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:292 +msgid "Specifies the directory the device is attached to" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:252 +msgid "" +"Specifies the mac-address for the actor in protocol packet exchanges " +"(LACPDUs). If empty, masters' mac address defaults to system default" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:175 +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:171 +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:886 +msgid "" +"Specifies the maximum transmit power the wireless radio may use. Depending " +"on regulatory requirements and wireless usage, the actual transmit power may " +"be reduced by the driver." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:236 +msgid "" +"Specifies the minimum number of links that must be active before asserting " +"carrier" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:200 +msgid "Specifies the mode to be used for this bonding interface" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:333 +msgid "" +"Specifies the number of IGMP membership reports to be issued after a " +"failover event in 200ms intervals" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:276 +msgid "" +"Specifies the number of packets to transmit through a slave before moving to " +"the next one" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:310 +msgid "" +"Specifies the number of peer notifications (gratuitous ARPs and unsolicited " +"IPv6 Neighbor Advertisements) to be issued after a failover event" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:284 +msgid "" +"Specifies the number of seconds between instances where the bonding driver " +"sends learning packets to each slaves peer switch" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:374 +msgid "Specifies the quantity of ARP IP targets that must be reachable" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:268 +msgid "" +"Specifies the rate in which the link partner will be asked to transmit " +"LACPDU packets" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:225 +msgid "" +"Specifies the reselection policy for the primary slave when failure of the " +"active slave or recovery of the primary slave occurs" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:244 +msgid "Specifies the system priority" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:403 +msgid "" +"Specifies the time in milliseconds to wait before disabling a slave after a " +"link failure detection" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:411 +msgid "" +"Specifies the time in milliseconds to wait before enabling a slave after a " +"link recovery detection" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:382 +msgid "" +"Specifies whether ARP probes and replies should be validated or non-ARP " +"traffic should be filtered for link monitoring" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:301 +msgid "" +"Specifies whether active-backup mode should set all slaves to the same MAC " +"address at enslavement" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:419 +msgid "" +"Specifies whether or not miimon should use MII or ETHTOOL ioctls vs. " +"netif_carrier_ok()" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:293 +msgid "" +"Specifies whether to shuffle active flows across slaves based on the load" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:179 +msgid "" +"Specifies which slave interfaces should be attached to this bonding interface" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:212 +msgid "" +"Specifies which slave is the primary device. It will always be the active " +"slave while it is available" +msgstr "" + +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:63 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:72 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:67 +msgid "Specify a TOS (Type of Service)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:67 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:72 +msgid "" +"Specify a TOS (Type of Service). Can be either inherit (the " +"outer header inherits the value of the inner header) or an hexadecimal value " +"starting with 0x (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:62 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:67 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:67 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:72 +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64) (optional)." +msgstr "" + +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:58 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:67 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:62 +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:72 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:77 +msgid "" +"Specify a Traffic Class. Can be either inherit (the outer " +"header inherits the value of the inner header) or an hexadecimal value " +"starting with 0x (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:57 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:62 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:62 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:67 +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes) (optional)." +msgstr "" + +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:53 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:62 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:57 +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1931 +msgid "Specify the secret encryption key here." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:581 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:99 +msgid "Start" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:76 +msgid "Start priority" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1765 +msgid "Start refresh" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4253 +msgid "Starting configuration apply…" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1678 +msgid "Starting wireless scan..." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:109 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:64 +msgid "Startup" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:19 +msgid "Static IPv4 Routes" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:19 +msgid "Static IPv6 Routes" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:165 +msgid "Static Leases" +msgstr "" + +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:76 +msgid "Static Routes" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:1981 +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:172 +#: modules/luci-compat/luasrc/model/network.lua:967 +msgid "Static address" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:411 +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1102 +msgid "Station inactivity limit" +msgstr "" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:16 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:385 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:871 +#: modules/luci-mod-status/luasrc/view/admin_status/index.htm:9 +msgid "Status" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:356 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:101 +msgid "Stop" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1676 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1770 +msgid "Stop refresh" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:259 +msgid "Strict order" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:33 +msgid "Strong" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/simpleform.htm:61 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1956 +msgid "Submit" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:203 +msgid "Suppress logging" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:204 +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:44 +msgid "Swap free" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:139 +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:3 +msgid "Switch" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:172 +msgid "Switch %q" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:150 +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2883 +#: modules/luci-compat/luasrc/model/network.lua:1426 +msgid "Switch VLAN" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:403 +msgid "Switch protocol" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:103 +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:104 +#: modules/luci-compat/luasrc/view/cbi/ipaddr.htm:26 +msgid "Switch to CIDR list notation" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2657 +msgid "Symbolic link" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:75 +msgid "Sync with NTP-Server" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:67 +msgid "Sync with browser" +msgstr "" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:26 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:17 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:99 +#: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:3 +msgid "System" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/syslog.js:25 +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:39 +msgid "System Log" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:243 +msgid "System Priority" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:104 +msgid "System Properties" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:141 +msgid "System log buffer size" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:336 +msgid "TCP:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:163 +msgid "TFTP Settings" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:371 +msgid "TFTP server root" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:49 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:84 +msgid "TX" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:142 +msgid "TX Rate" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:17 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:166 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:184 +msgid "Table" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:31 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:65 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:163 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:181 +msgid "Target" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:103 +msgid "Target network" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:50 +msgid "Terminate" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:84 +msgid "The block mount command failed with code %d" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:77 +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:40 +msgid "The IPv4 address or the fully-qualified domain name of the remote end." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:42 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:42 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:40 +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:40 +msgid "The IPv6 address or the fully-qualified domain name of the remote end." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:42 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:42 +msgid "" +"The IPv6 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:53 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:59 +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1916 +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/error.htm:6 +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4129 +msgid "" +"The device could not be reached within %d seconds after applying the pending " +"changes, which caused the configuration to be rolled back for safety " +"reasons. If you believe that the configuration changes are correct " +"nonetheless, perform an unchecked configuration apply. Alternatively, you " +"can dismiss this warning and edit changes before attempting to apply again, " +"or revert all pending changes to keep the currently working configuration " +"state." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:280 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:392 +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:736 +msgid "" +"The existing wireless configuration needs to be changed for LuCI to function " +"properly." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:215 +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js:195 +msgid "The following rules are currently active on this system." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:154 +msgid "The gateway address must not be a local IP address" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:147 +msgid "The given SSH public key has already been added." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:153 +msgid "" +"The given SSH public key is invalid. Please supply proper public RSA or " +"ECDSA keys." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:716 +msgid "The interface name is already used" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:722 +msgid "The interface name is too long" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:61 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:55 +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:57 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:63 +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:163 +msgid "The local IPv4 address" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:46 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:46 +#: protocols/luci-proto-ipip/htdocs/luci-static/resources/protocol/ipip.js:44 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:44 +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:169 +msgid "The local IPv4 netmask" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:46 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:46 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:44 +msgid "The local IPv6 address over which the tunnel is created (optional)." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1922 +msgid "The network name is already used" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:139 +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:158 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:42 +msgid "The reboot command failed with code %d" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:147 +msgid "The restore command failed with code %d" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1297 +msgid "The selected %s mode is incompatible with %s encryption" +msgstr "" + +#: modules/luci-base/luasrc/view/csrftoken.htm:11 +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:98 +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:291 +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:163 +msgid "" +"The system is rebooting now. If the restored configuration changed the " +"current LAN IP address, you might need to reconnect manually." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:85 +msgid "The system password has been successfully changed." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:317 +msgid "The sysupgrade command failed with code %d" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:120 +msgid "" +"The uploaded backup archive appears to be valid and contains the files " +"listed below. Press \"Continue\" to restore the backup and reboot, or " +"\"Cancel\" to abort the operation." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:115 +msgid "The uploaded backup archive is not readable" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:244 +msgid "The uploaded firmware does not allow keeping current configuration." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:239 +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:535 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:567 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:52 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:89 +msgid "There are no active leases" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:4268 +msgid "There are no changes to apply" +msgstr "" + +#: themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm:55 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:213 +#: themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm:56 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:80 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:282 +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:49 +msgid "This IPv4 address of the relay" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1551 +msgid "This authentication type is not applicable to the selected EAP method." +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:57 +msgid "This does not look like a valid PEM file" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:256 +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' for domain-specific or full upstream DNS servers." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:426 +#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:16 +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:81 +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:116 +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:54 +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with ...:2/64" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:173 +msgid "" +"This is the only DHCP in the local network" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:73 +msgid "This is the plain username for logging into the account" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:57 +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontab.js:28 +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:50 +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:65 +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1505 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1563 +msgid "" +"This option cannot be used because the ca-bundle package is not installed." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:2205 +#: modules/luci-base/htdocs/luci-static/resources/form.js:2511 +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:172 +#: modules/luci-compat/luasrc/view/cbi/tsection.htm:32 +msgid "This section contains no values yet" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:110 +msgid "Time Synchronization" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1093 +msgid "Time interval for rekeying GTK" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:124 +msgid "Timezone" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/luci.js:2678 +msgid "To login…" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:372 +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:907 +msgid "Tone" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:35 +msgid "Total Available" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:102 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:103 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:113 +msgid "Traceroute" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:53 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:64 +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:96 +msgid "Traffic" +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:72 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:77 +msgid "Traffic Class" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:385 +msgid "Transfer" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/netdev.js:24 +msgid "Transmit" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:317 +msgid "Transmit Hash Policy" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js:74 +msgid "Trigger" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/led-trigger/netdev.js:19 +msgid "Trigger Mode" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:69 +msgid "Tunnel ID" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2886 +#: modules/luci-compat/luasrc/model/network.lua:1431 +msgid "Tunnel Interface" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:44 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:55 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:76 +msgid "Tunnel Link" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:185 +msgid "Tx-Power" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:44 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:61 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:43 +msgid "Type" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/connections.js:326 +msgid "UDP:" +msgstr "" + +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:90 +msgid "UMTS only" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_3g.lua:10 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:43 +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:254 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:360 +msgid "UUID" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:16 +#: modules/luci-base/htdocs/luci-static/resources/network.js:17 +#: modules/luci-compat/luasrc/model/network.lua:34 +#: modules/luci-compat/luasrc/model/network.lua:35 +msgid "Unable to determine device name" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:18 +#: modules/luci-compat/luasrc/model/network.lua:36 +msgid "Unable to determine external IP address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:19 +#: modules/luci-compat/luasrc/model/network.lua:37 +msgid "Unable to determine upstream interface" +msgstr "" + +#: modules/luci-base/luasrc/view/error404.htm:11 +msgid "Unable to dispatch" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/dmesg.js:9 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/syslog.js:15 +msgid "Unable to load log data:" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_modemmanager.lua:54 +#: modules/luci-compat/luasrc/model/network/proto_qmi.lua:54 +#: protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js:22 +msgid "Unable to obtain client ID" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:221 +msgid "Unable to obtain mount information" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:278 +msgid "Unable to reset ip6tables counters: %s" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:276 +msgid "Unable to reset iptables counters: %s" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:61 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:7 +msgid "Unable to resolve AFTR host name" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:20 +#: modules/luci-compat/luasrc/model/network.lua:38 +msgid "Unable to resolve peer host name" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:284 +msgid "Unable to restart firewall: %s" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontab.js:20 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:342 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:57 +msgid "Unable to save contents: %s" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/50_dsl.js:33 +msgid "Unavailable Seconds (UAS)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/fs.js:102 +msgid "Unexpected reply data format" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:1983 +#: modules/luci-compat/luasrc/model/network.lua:971 +msgid "Unknown" +msgstr "" + +#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:47 +msgid "Unknown and unsupported connection method." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2292 +#: modules/luci-compat/luasrc/model/network.lua:1138 +msgid "Unknown error (%s)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:412 +msgid "Unknown error code" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:1980 +#: modules/luci-base/htdocs/luci-static/resources/protocol/none.js:6 +#: modules/luci-compat/luasrc/model/network.lua:965 +msgid "Unmanaged" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:195 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:217 +msgid "Unmount" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:112 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:259 +msgid "Unnamed key" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3973 +msgid "Unsaved Changes" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/rpc.js:410 +msgid "Unspecified error" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_4x6.lua:64 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:9 +msgid "Unsupported MAP type" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_ncm.lua:69 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:27 +msgid "Unsupported modem" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:267 +msgid "Unsupported protocol type." +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/tblsection.htm:151 +msgid "Up" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:410 +msgid "Up Delay" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3860 +msgid "Upload" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:413 +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:138 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:169 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:384 +msgid "Upload archive..." +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2816 +msgid "Upload file" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2791 +msgid "Upload file…" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:2738 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3848 +msgid "Upload request failed: %s" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3767 +#: modules/luci-base/htdocs/luci-static/resources/ui.js:3821 +msgid "Uploading file…" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:737 +msgid "" +"Upon pressing \"Continue\", anonymous \"wifi-iface\" sections will be " +"assigned with a name in the form wifinet# and the network will be " +"restarted to apply the updated configuration." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:81 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:60 +msgid "Uptime" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:177 +msgid "Use /etc/ethers" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:269 +msgid "Use DHCP advertised servers" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:167 +msgid "Use DHCP gateway" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:40 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:124 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:39 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:116 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:68 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:59 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:103 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:90 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:64 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:77 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:100 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:69 +msgid "Use DNS servers advertised by peer" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:565 +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:56 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:97 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:77 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:61 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:75 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:92 +msgid "Use MTU on tunnel interface" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:93 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:73 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:57 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:88 +msgid "Use TTL on tunnel interface" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:320 +msgid "Use XOR of hardware MAC addresses (layer2)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:321 +msgid "Use XOR of hardware MAC addresses and IP addresses (layer2+3)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:323 +msgid "" +"Use XOR of hardware MAC addresses and IP addresses, rely on skb_flow_dissect " +"(encap2+3)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:294 +msgid "Use as external overlay (/overlay)" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:293 +msgid "Use as root filesystem (/)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:34 +msgid "Use broadcast flag" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:860 +msgid "Use builtin IPv6-management" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:43 +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:182 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:127 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:42 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:119 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:62 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:106 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:93 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:67 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:80 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:103 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:72 +msgid "Use custom DNS servers" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:37 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:116 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:33 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:64 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:56 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:100 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:87 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:61 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:74 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:97 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:61 +msgid "Use default gateway" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:48 +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:230 +#: protocols/luci-proto-3g/htdocs/luci-static/resources/protocol/3g.js:119 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/464xlat.js:51 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6in4.js:88 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6rd.js:68 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/6to4.js:52 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:70 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:83 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:111 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:153 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:72 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/l2tp.js:67 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/ppp.js:111 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoa.js:98 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:72 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:85 +#: protocols/luci-proto-pppossh/htdocs/luci-static/resources/protocol/pppossh.js:108 +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:64 +msgid "Use gateway metric" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:96 +msgid "Use legacy MAP" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:96 +msgid "" +"Use legacy MAP interface identifier format (draft-ietf-softwire-map-00) " +"instead of RFC7597" +msgstr "" + +#: protocols/luci-proto-relay/htdocs/luci-static/resources/protocol/relay.js:179 +msgid "Use routing table" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1498 +msgid "Use system certificates" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1556 +msgid "Use system certificates for inner-tunnel" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:412 +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address identifies the host, the IPv4-Address specifies the fixed " +"address to use, and the Hostname is assigned as a symbolic name to " +"the requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:322 +msgid "Use upper layer protocol information (layer3+4)" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:324 +msgid "" +"Use upper layer protocol information, rely on skb_flow_dissect (encap3+4)" +msgstr "" + +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:36 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:194 +msgid "Used" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1394 +msgid "Used Key Slot" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1437 +msgid "" +"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not " +"needed with normal WPA(2)-PSK." +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:105 +msgid "User Group" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:114 +msgid "User certificate (PEM encoded)" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:126 +msgid "User key (PEM encoded)" +msgstr "" + +#: modules/luci-base/luasrc/view/sysauth.htm:23 +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:106 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:50 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:56 +msgid "Username" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:975 +msgid "VC-Mux" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:923 +msgid "VDSL" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:173 +msgid "VLANs on %q" +msgstr "" + +#: modules/luci-base/root/usr/share/luci/menu.d/luci-base.json:54 +msgid "VPN" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:42 +msgid "VPN Local address" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:46 +msgid "VPN Local port" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:96 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:42 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pptp.js:58 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:39 +msgid "VPN Server" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:99 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:45 +msgid "VPN Server port" +msgstr "" + +#: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:103 +#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:60 +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_vpnc.lua:9 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:9 +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:10 +msgid "VXLAN (RFC7348)" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan.js:53 +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:48 +msgid "VXLAN network identifier" +msgstr "" + +#: protocols/luci-proto-vxlan/htdocs/luci-static/resources/protocol/vxlan6.js:10 +msgid "VXLANv6 (RFC7348)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1498 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1556 +msgid "" +"Validate server certificate using built-in system CA bundle,
requires " +"the \"ca-bundle\" package" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:387 +msgid "Validation for all slaves" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:385 +msgid "Validation only for active slave" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:386 +msgid "Validation only for backup slaves" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:154 +msgid "Value must not be empty" +msgstr "" + +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:73 +msgid "Vendor" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/dhcp.js:55 +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js:196 +msgid "Verifying the uploaded image file." +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:59 +msgid "Virtual dynamic interface" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1032 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1033 +msgid "WDS" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1217 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1306 +msgid "WEP Open System" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1218 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1307 +msgid "WEP Shared Key" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1931 +msgid "WEP passphrase" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1070 +msgid "WMM Mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1931 +msgid "WPA passphrase" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1208 +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:47 +msgid "Waiting for device..." +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:168 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:178 +msgid "Warning" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js:26 +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:37 +msgid "Weak" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1460 +msgid "" +"When using a PSK, the PMK can be automatically generated. When enabled, the " +"R0/R1 key options below are not applied. Disable this to use the R0 and R1 " +"key options." +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/wireless_modefreq.htm:166 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:468 +msgid "Width" +msgstr "" + +#: modules/luci-compat/luasrc/model/network/proto_wireguard.lua:9 +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:29 +msgid "WireGuard VPN" +msgstr "" + +#: modules/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json:17 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:87 +#: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:105 +msgid "Wireless" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2874 +#: modules/luci-compat/luasrc/model/network.lua:1419 +msgid "Wireless Adapter" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/network.js:2853 +#: modules/luci-base/htdocs/luci-static/resources/network.js:4057 +#: modules/luci-compat/luasrc/model/network.lua:1405 +#: modules/luci-compat/luasrc/model/network.lua:1868 +msgid "Wireless Network" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:753 +msgid "Wireless Overview" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:922 +msgid "Wireless Security" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:735 +msgid "Wireless configuration migration" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:153 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:193 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:47 +msgid "Wireless is disabled" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:153 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:193 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:47 +msgid "Wireless is not associated" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:877 +msgid "Wireless network is disabled" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:877 +msgid "Wireless network is enabled" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:275 +msgid "Write received DNS requests to syslog" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:160 +msgid "Write system log to file" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:204 +msgid "XOR policy (balance-xor, 2)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:3643 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:295 +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:344 +#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:109 +msgid "Yes" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:303 +msgid "Yes (none, 0)" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:176 +msgid "" +"You appear to be currently connected to the device via the \"%h\" interface. " +"Do you really want to shut down the interface?" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js:112 +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" + +#: themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm:65 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:223 +#: themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm:73 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:294 +msgid "" +"You must enable JavaScript in your browser or LuCI will not work properly." +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:115 +msgid "" +"You must select a primary interface which is included in selected slave " +"interfaces!" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:96 +msgid "" +"You must select at least one ARP IP target if ARP monitoring is selected!" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:192 +msgid "ZRam Compression Algorithm" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:199 +msgid "ZRam Compression Streams" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:185 +msgid "ZRam Settings" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js:187 +msgid "ZRam Size" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:331 +msgid "any" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:908 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:916 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:921 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1157 +#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:78 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:48 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:51 +#: protocols/luci-proto-ppp/htdocs/luci-static/resources/protocol/pppoe.js:103 +msgid "auto" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:85 +msgid "automatic" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:82 +msgid "baseT" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:981 +msgid "bridged" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:146 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:401 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:35 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:99 +#: modules/luci-compat/luasrc/view/cbi/network_netlist.htm:31 +msgid "create" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/network_netlist.htm:69 +msgid "create:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:55 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:57 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:58 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:62 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:63 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:83 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:84 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:87 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:185 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:186 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:187 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:171 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:173 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:174 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:178 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:179 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:261 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:264 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:267 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:271 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:274 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:277 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:303 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:304 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:305 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:309 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:310 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:311 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:313 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:314 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/wireless.js:315 +msgid "dBm" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1014 +msgid "disable" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/protocol/static.js:185 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:626 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:632 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:638 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:91 +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dhcpv6.js:25 +msgid "disabled" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:519 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:553 +msgid "driver default" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:81 +msgid "e.g: --proxy 10.10.10.10" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:83 +msgid "e.g: dump" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:524 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:545 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:42 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:69 +msgid "expired" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:182 +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:85 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:195 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:61 +msgid "forward" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:84 +msgid "full-duplex" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:84 +msgid "half-duplex" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:569 +msgid "hexadecimal encoded value" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1738 +msgid "hidden" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:629 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:635 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:640 +msgid "hybrid mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js:36 +msgid "if target is a network" +msgstr "" + +#: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/dslite.js:63 +msgid "ignore" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:69 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:191 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:46 +msgid "input" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:395 +msgid "key between 8 and 63 characters" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:407 +msgid "key with either 5 or 13 characters" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:189 +msgid "local DNS file" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1316 +msgid "medium security" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1465 +msgid "minutes" +msgstr "" + +#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:422 +msgid "netif_carrier_ok()" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:46 +msgid "no" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:76 +msgid "no link" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:59 +msgid "non-empty value" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:3007 +msgid "none" +msgstr "" + +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:41 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:55 +#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:69 +msgid "not present" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:347 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:901 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:905 +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:197 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:245 +msgid "off" +msgstr "" + +#: themes/luci-theme-material/luasrc/view/themes/material/header.htm:196 +#: themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm:242 +msgid "on" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1317 +msgid "open network" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:69 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:46 +msgid "output" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:241 +msgid "positive decimal value" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:233 +msgid "positive integer value" +msgstr "" + +#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:80 +msgid "random" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:628 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:634 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:639 +msgid "relay mode" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:982 +msgid "routed" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1093 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1102 +msgid "sec" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:627 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:633 +msgid "server mode" +msgstr "" + +#: protocols/luci-proto-sstp/htdocs/luci-static/resources/protocol/sstp.js:53 +msgid "sstpc Log-level" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:649 +msgid "stateful-only" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:647 +msgid "stateless" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:648 +msgid "stateless + stateful" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1315 +msgid "strong security" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:352 +msgid "tagged" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1448 +msgid "time units (TUs / 1.024 ms) [1000-65535]" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:559 +msgid "unique value" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:534 +msgid "unknown" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:340 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:522 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:543 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:40 +#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js:67 +msgid "unlimited" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/form.js:3372 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:76 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:138 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:369 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:393 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:428 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:465 +#: modules/luci-base/htdocs/luci-static/resources/tools/widgets.js:561 +#: modules/luci-compat/luasrc/view/cbi/firewall_zonelist.htm:53 +#: modules/luci-compat/luasrc/view/cbi/network_netlist.htm:38 +msgid "unspecified" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/network_netlist.htm:71 +msgid "unspecified -or- create:" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:350 +msgid "untagged" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:246 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:121 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:132 +msgid "valid IP address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:246 +msgid "valid IP address or prefix" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:281 +msgid "valid IPv4 CIDR" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:254 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:125 +msgid "valid IPv4 address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:254 +msgid "valid IPv4 address or network" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:374 +msgid "valid IPv4 address:port" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:314 +msgid "valid IPv4 network" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:276 +msgid "valid IPv4 or IPv6 CIDR" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:267 +msgid "valid IPv4 prefix value (0-32)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:286 +msgid "valid IPv6 CIDR" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:262 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:129 +msgid "valid IPv6 address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:262 +msgid "valid IPv6 address or prefix" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:304 +msgid "valid IPv6 host id" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:319 +msgid "valid IPv6 network" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:272 +msgid "valid IPv6 prefix value (0-128)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:340 +msgid "valid MAC address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:411 +msgid "valid UCI identifier" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:362 +msgid "valid UCI identifier, hostname or IP address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:383 +#: modules/luci-base/htdocs/luci-static/resources/validation.js:386 +msgid "valid address:port" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:533 +#: modules/luci-base/htdocs/luci-static/resources/validation.js:537 +msgid "valid date (YYYY-MM-DD)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:237 +msgid "valid decimal value" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:405 +msgid "valid hexadecimal WEP key" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:393 +msgid "valid hexadecimal WPA key" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:368 +msgid "valid host:port" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:355 +#: modules/luci-base/htdocs/luci-static/resources/validation.js:357 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:73 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:79 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:107 +msgid "valid hostname" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:345 +msgid "valid hostname or IP address" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:229 +msgid "valid integer value" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:309 +msgid "valid network in address/netmask notation" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:508 +msgid "valid phone digit (0-9, \"*\", \"#\", \"!\" or \".\")" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:332 +#: modules/luci-base/htdocs/luci-static/resources/validation.js:335 +msgid "valid port or port range (port1-port2)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:324 +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:136 +msgid "valid port value" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:513 +msgid "valid time (HH:MM:SS)" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:435 +msgid "value between %d and %d characters" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:416 +msgid "value between %f and %f" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:420 +msgid "value greater or equal to %f" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:424 +msgid "value smaller or equal to %f" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:429 +msgid "value with %d characters" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:440 +msgid "value with at least %d characters" +msgstr "" + +#: modules/luci-base/htdocs/luci-static/resources/validation.js:445 +msgid "value with at most %d characters" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1317 +msgid "weak security" +msgstr "" + +#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:46 +msgid "yes" +msgstr "" + +#: modules/luci-compat/luasrc/view/cbi/delegator.htm:20 +msgid "« Back" +msgstr "" diff --git a/luci-mod-dashboard/Makefile b/luci-mod-dashboard/Makefile new file mode 100755 index 000000000..6a6d84166 --- /dev/null +++ b/luci-mod-dashboard/Makefile @@ -0,0 +1,21 @@ +# +# Copyright 2019-2020 ZHANG Zhao +# Copyright 2020 Ycarus (Yannick Chabanois) for OpenMPTCProuter +# +# This is free software, licensed under the Apache License, Version 2.0 . +# +# Based on openwrt luci commit 03c77dafe3cfb922b995adfe9c0f8a75c98a18af +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Dashboard Pages +LUCI_DEPENDS:=+luci-base +libiwinfo + +PKG_BUILD_DEPENDS:=iwinfo +PKG_LICENSE:=Apache-2.0 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/css/custom.css b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/css/custom.css new file mode 100755 index 000000000..f20713832 --- /dev/null +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/css/custom.css @@ -0,0 +1,300 @@ +/** + * Dashboard Principals Styles +**/ + +.Dashboard { + color: #212529!important; +} + +.Dashboard h3 { + color:#000; + background: transparent; +} + +.Dashboard hr { + border: 0; + height: 0; + overflow: visible; + margin: 0; + box-sizing: content-box; + border-top: 1px solid rgba(0,0,0,.1); +} + +.Dashboard .box-s1 { + min-height: 550px; +} + +.Dashboard .internet-status-self .internet-status-info .title { + height: 97px; +} + +.Dashboard .dashboard-bg { + border-radius: 16px; + background-color: #e0e0e0; +} + +.Dashboard div > table > tbody > tr:nth-of-type(2n), div > .table > .tr:nth-of-type(2n) { + background-color: transparent; +} +.Dashboard .tr { + background-color: transparent; +} + +.Dashboard .title { + text-align: center; +} + +.Dashboard .section-content { + display: flex; + vertical-align: top; + padding: 20px 0 0 0; + align-items: flex-start; + justify-content: space-between; +} + +.Dashboard .section-content > div { + width:100%; + padding:1.5em; +} + +.Dashboard .section-content .settings-info { + padding-top:1em; +} + +.Dashboard .section-content .internet-status-info .settings-info { + display: flex; + justify-content: space-around; +} + +.Dashboard .section-content .internet-status-info .settings-info > div > p > i{ + padding: 0 0 0 5px; +} + +.Dashboard .section-content > div:nth-child(2) { + margin-left:20px; +} + +.Dashboard .devices-list .devices-info { + margin-bottom: 0; +} + +.Dashboard .devices-list .devices-info .tr .td{ + padding:0px 0 0 10px; +} + +.Dashboard .devices-list .devices-info .tr .td:first-child { + width: 33%; + word-break: break-all; +} + +.Dashboard .devices-list hr:nth-child(4) { + margin-top: 0; + margin-bottom: 8px; +} + +.Dashboard .router-status-lan .devices-list .table-titles .th:first-child { + width: 35%; +} + +.Dashboard .router-status-self .router-status-info .settings-info { + padding-left:27px; +} + +.Dashboard .router-status-self .router-status-info .title h3 { + margin-top:-2px; +} + +.Dashboard .router-status-info svg { + width: 70px; +} + +.Dashboard .internet-status-self .settings-info p:first-child span:first-child{ + font-size: 12px; + font-weight: 500; +} + +//.Dashboard .internet-status-self .settings-info p:first-child span:first-child, +.Dashboard .router-status-wifi .wifi-info .settings-info p:first-child span:first-child, +.Dashboard .router-status-wifi .wifi-info .settings-info p:nth-child(2) span:first-child{ + font-weight: 700; +} + +.Dashboard .settings-info p span:first-child { + width: 35%; + font-size: 12px; + text-align: right; +} + +.Dashboard .settings-info p span:nth-child(2){ + display: inline-block; + word-break: break-all; + overflow: hidden; + max-height: 16px; + position: relative; + top:2px; +} + +.Dashboard .router-status-info .settings-info p span:nth-child(2){ + max-width: 283px; +} + +.Dashboard .settings-info p span.ssid { + max-height: 18px; + top: 3px; +} + +.Dashboard .settings-info p span.encryption { + max-width: 82px; +} + +.Dashboard .router-status-wifi .wifi-info .settings-info, +.Dashboard .router-status-lan .lan-info .settings-info +{ + display: flex; + justify-content: space-around; +} + +.Dashboard .router-status-wifi .wifi-info .devices-info .tr .td { + padding: 0 10px 0 10px; +} + +.Dashboard .router-status-wifi .wifi-info .devices-info .tr .td:first-child { + width: 30%; + word-break: break-all; +} + +.Dashboard .router-status-wifi .wifi-info .devices-info .tr .td:nth-child(2) { + width: 21%; + overflow: hidden; + padding-left:0; + word-break: break-all; +} + +.Dashboard .router-status-wifi .wifi-info .settings-info{ + padding:1em 0 1em 0; +} + +.Dashboard .router-status-wifi .wifi-info .devices-info .tr .td:nth-child(3) { + width: 22%; + overflow: hidden; + position: relative; + top: -3px; +} + +.Dashboard .router-status-wifi .wifi-info .devices-info .tr .td:nth-child(5) { + width: initial; +} + +.Dashboard .router-status-wifi .wifi-info > hr:last-child { + margin-bottom:0; +} + +.Dashboard .router-status-wifi .wifi-info .devices-info .device-info .progress { + padding: 0; + width: 100%; + margin: 0; +} + +.Dashboard .wifi-info .devices-info .table-titles { + border-bottom:1px solid rgba(0,0,0,.1); +} + +.Dashboard .label-success { + background-color: green; +} + +.Dashboard .label-danger { + background-color: red; +} + +/** + * Responsive + **/ +@media screen and (min-width: 200px) and (max-width: 640px) { + + .Dashboard .cbi-section-1 > .section-content { + padding-top:10px; + } + + .Dashboard .section-content { + display:block; + } + + .Dashboard .section-content > div{ + padding: 1em; + } + + .Dashboard .section-content > div:first-child { + margin-bottom:10px; + } + + .Dashboard .section-content > div:nth-child(2) { + margin:0; + } + + .Dashboard .router-status-self .router-status-info .settings-info { + padding:0; + } + + .Dashboard .section-content .internet-status-info .settings-info { + display:block; + } + + .Dashboard .section-content .internet-status-info .settings-info > div:first-child { + margin-bottom: 10px; + border-bottom: 1px solid rgba(0,0,0,.1); + } + + .Dashboard .section-content .router-status-lan .devices-info .table-titles { + display:block; + } + + .Dashboard .router-status-wifi .wifi-info .settings-info > div{ + flex:1; + } + + .Dashboard .section-content .router-status-lan .devices-info .table-titles .th:last-child{ + padding-left: 70px; + } + + .Dashboard .section-content .router-status-lan .devices-info .td:first-child{ + flex: 2 2 31%; + } + + .Dashboard .section-content .router-status-lan .devices-info .td:nth-child(2){ + flex: 1 1 24%; + padding: 0; + } + + .Dashboard .section-content .router-status-lan .devices-info .td:last-child{ + word-wrap: normal; + } + + .Dashboard .router-status-wifi .wifi-info .settings-info > div p:nth-child(6) > span:last-child{ + display: inline-block; + overflow: hidden; + height: 14px; + width: 52%; + word-break: break-word; + line-height: 15px; + } + + .Dashboard .wifi-info .devices-info .table-titles { + padding: 0; + margin: 0; + display: flex; + border-radius: initial; + } + + .Dashboard .wifi-info .devices-info .table-titles .th { + flex: 2 2 24%; + } + + .Dashboard .wifi-info .devices-info .tr .td { + flex: 2 2 10%; + } + + .Dashboard .wifi-info hr:nth-child(4) { + margin-bottom: 0; + } +} diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/devices.svg b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/devices.svg new file mode 100755 index 000000000..2ab09176b --- /dev/null +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/devices.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/internet.svg b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/internet.svg new file mode 100755 index 000000000..8563603c9 --- /dev/null +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/internet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/not-internet.svg b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/not-internet.svg new file mode 100755 index 000000000..d66f8379f --- /dev/null +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/not-internet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/router.svg b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/router.svg new file mode 100755 index 000000000..1ff29ee56 --- /dev/null +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/router.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/wireless.svg b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/wireless.svg new file mode 100755 index 000000000..576baafe8 --- /dev/null +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/wireless.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js new file mode 100755 index 000000000..cf69d4d0e --- /dev/null +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js @@ -0,0 +1,384 @@ +'use strict'; +'require baseclass'; +'require fs'; +'require rpc'; +'require network'; + +var callSystemBoard = rpc.declare({ + object: 'system', + method: 'board' +}); + +var callSystemInfo = rpc.declare({ + object: 'system', + method: 'info' +}); + +var callOpenMPTCProuterInfo = rpc.declare({ + object: 'openmptcprouter', + method: 'status' +}); + + +return baseclass.extend({ + + params: [], + + formatBytes: function(a,b=2){if(0===a)return"0 Bytes";const c=0>b?0:b,d=Math.floor(Math.log(a)/Math.log(1024));return parseFloat((a/Math.pow(1024,d)).toFixed(c))+" "+["Bytes","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"][d]}, + load: function() { + return Promise.all([ + network.getWANNetworks(), + network.getWAN6Networks(), + L.resolveDefault(callSystemBoard(), {}), + L.resolveDefault(callSystemInfo(), {}), + L.resolveDefault(callOpenMPTCProuterInfo(), {}) + ]); + }, + + renderHtml: function(data, type) { + + var icon = type; + var title = 'router' == type ? _('System') : _('Internet'); + var container_wapper = E('div', { 'class': type + '-status-self dashboard-bg box-s1'}); + var container_box = E('div', { 'class': type + '-status-info'}); + var container_item = E('div', { 'class': 'settings-info'}); + + if ('internet' == type) { + icon = (data.internet.v4.connected.value || data.internet.v6.connected.value) ? type : 'not-internet'; + } + + container_box.appendChild(E('div', { 'class': 'title'}, [ + E('img', { + 'src': L.resource('view/dashboard/icons/' + icon + '.svg'), + 'width': 'router' == type ? 64 : 54, + 'title': title, + 'class': 'middle' + }), + E('h3', title) + ])); + + container_box.appendChild(E('hr')); + + if ('internet' == type) { + + var container_internet_v4 = E('div'); + var container_internet_v6 = E('div'); + var container_internet_vps = E('div'); + + for(var idx in data['vps']) { + var classname = ver, + suppelements = '', + visible = data['vps'][idx].visible; + if ('title' === idx) { + container_internet_vps.appendChild( + E('p', { 'class': 'mt-2'}, [ + E('h4', {'class': ''}, [ data['vps'].title ]), + ]) + ); + continue; + } + if (visible) { + container_internet_vps.appendChild( + E('p', { 'class': 'mt-2'}, [ + E('span', {'class': ''}, [ data['vps'][idx].title + ':' ]), + E('span', {'class': ''}, [ data['vps'][idx].value ]), + suppelements + ]) + ); + } + } + + + for(var idx in data['internet']) { + + for(var ver in data['internet'][idx]) { + var classname = ver, + suppelements = '', + visible = data['internet'][idx][ver].visible; + + if('connected' === ver) { + classname = data['internet'][idx][ver].value ? 'label label-success' : 'label label-danger'; + data['internet'][idx][ver].value = data['internet'][idx][ver].value ? _('yes') : _('no'); + } + + if ('v4' === idx) { + + if ('title' === ver) { + container_internet_v4.appendChild( + E('p', { 'class': 'mt-2'}, [ + E('h4', {'class': ''}, [ data['internet'][idx].title ]), + ]) + ); + continue; + } + + if ('addrsv4' === ver) { + var addrs = data['internet'][idx][ver].value; + if(Array.isArray(addrs) && addrs.length) { + for(var ip in addrs) { + data['internet'][idx][ver].value = addrs[ip].split('/')[0]; + } + } + } + + if (visible) { + container_internet_v4.appendChild( + E('p', { 'class': 'mt-2'}, [ + E('span', {'class': ''}, [ data['internet'][idx][ver].title + ':' ]), + E('span', {'class': classname }, [ data['internet'][idx][ver].value ]), + suppelements + ]) + ); + } + + } else { + + if ('title' === ver) { + container_internet_v6.appendChild( + E('p', { 'class': 'mt-2'}, [ + E('h4', {'class': ''}, [ data['internet'][idx].title ]), + ]) + ); + continue; + } + + if (visible) { + container_internet_v6.appendChild( + E('p', {'class': 'mt-2'}, [ + E('span', {'class': ''}, [data['internet'][idx][ver].title + ':']), + E('span', {'class': classname}, [data['internet'][idx][ver].value]), + suppelements + ]) + ); + } + } + } + } + + container_item.appendChild(E('p', { 'class': 'table'}, [ + E('div', { 'class': 'tr' }, [ + E('div', { 'class': 'td' }, [ container_internet_vps ]) + ]), + E('div', { 'class': 'tr' }, [ + E('div', { 'class': 'td' }, [ + container_internet_v4 + ]), + E('div', { 'class': 'td' }, [ + container_internet_v6 + ]) + ]) + ])); + } else { + for(var idx in data) { + container_item.appendChild( + E('p', { 'class': 'mt-2'}, [ + E('span', {'class': ''}, [ data[idx].title + ':' ]), + E('span', {'class': ''}, [ data[idx].value ]) + ]) + ); + } + } + + container_box.appendChild(container_item); + container_box.appendChild(E('hr')); + container_wapper.appendChild(container_box); + return container_wapper; + }, + + renderUpdateWanData: function(data, v6) { + for (var i = 0; i < data.length; i++) { + var ifc = data[i]; + + if (v6) { + this.params.internet.v6.ipprefixv6.value = ifc.getIP6Prefix() || '-'; + this.params.internet.v6.gatewayv6.value = ifc.getGateway6Addr() || '-'; + this.params.internet.v6.protocol.value= ifc.getI18n() || E('em', _('Not connected')); + this.params.internet.v6.addrsv6.value = ifc.getIP6Addrs() || [ '-' ]; + this.params.internet.v6.dnsv6.value = ifc.getDNS6Addrs() || [ '-' ]; + this.params.internet.v6.connected.value = ifc.isUp(); + } else { + var uptime = ifc.getUptime(); + this.params.internet.v4.uptime.value = (uptime > 0) ? '%t'.format(uptime) : '-'; + this.params.internet.v4.protocol.value= ifc.getI18n() || E('em', _('Not connected')); + this.params.internet.v4.gatewayv4.value = ifc.getGatewayAddr() || '0.0.0.0'; + this.params.internet.v4.connected.value = ifc.isUp(); + this.params.internet.v4.addrsv4.value = ifc.getIPAddrs() || [ '-']; + this.params.internet.v4.dnsv4.value = ifc.getDNSAddrs() || [ '-' ]; + } + } + }, + renderUpdateOpenMPTCProuterData: function(data, v6) { + if (data.openmptcprouter != undefined) { + if (data.openmptcprouter.wan_addr != '') this.params.omrvps.internet.v4.connected.value = true; + if (data.openmptcprouter.wan_addr) this.params.omrvps.internet.v4.addrsv4.value = data.openmptcprouter.wan_addr || [ '-']; + if (data.openmptcprouter.wan_addr6) this.params.omrvps.internet.v6.addrsv6.value = data.openmptcprouter.wan_addr6 || [ '-']; + if (data.openmptcprouter.vps_kernel) this.params.omrvps.vps.version.value = data.openmptcprouter.vps_kernel + ' ' + data.openmptcprouter.vps_omr_version || [ '-']; + if (data.openmptcprouter.vps_loadavg) { + var vps_loadavg = data.openmptcprouter.vps_loadavg.split(" "); + this.params.omrvps.vps.load.value = '%s, %s, %s'.format(vps_loadavg[0],vps_loadavg[1],vps_loadavg[2]); + } + if (data.openmptcprouter.vps_uptime) this.params.omrvps.vps.uptime.value = String.format('%t', data.openmptcprouter.vps_uptime) || [ '-']; + if (data.openmptcprouter.proxy_traffic) this.params.omrvps.vps.trafficproxy.value = this.formatBytes(data.openmptcprouter.proxy_traffic) || [ '-']; + if (data.openmptcprouter.vpn_traffic) this.params.omrvps.vps.trafficvpn.value = this.formatBytes(data.openmptcprouter.vpn_traffic) || [ '-']; + if (data.openmptcprouter.total_traffic) this.params.omrvps.vps.traffictotal.value = this.formatBytes(data.openmptcprouter.total_traffic) || [ '-']; + if (data.openmptcprouter.ipv6 != 'disabled') this.params.omrvps.internet.v6.connected.value = true; + } + }, + + renderInternetBox: function(data) { + + this.params.omrvps = { + vps: { + title: _('Server'), + + version: { + title: _('Version'), + visible: true, + value: [ '-' ] + }, + + load: { + title: _('Load'), + visible: true, + value: [ '-' ] + }, + + uptime: { + title: _('Uptime'), + visible: true, + value: [ '-' ] + }, + + trafficproxy: { + title: _('Proxy traffic'), + visible: true, + value: [ '-' ] + }, + + trafficvpn: { + title: _('VPN traffic'), + visible: true, + value: [ '-' ] + }, + + traffictotal: { + title: _('Total traffic'), + visible: true, + value: [ '-' ] + } + }, + + internet: { + + v4: { + title: _('IPv4 Internet'), + + connected: { + title: _('Connected'), + visible: true, + value: false + }, + + addrsv4: { + title: _('IPv4'), + visible: true, + value: [ '-' ] + } + }, + + v6: { + title: _('IPv6 Internet'), + + connected: { + title: _('Connected'), + visible: true, + value: false + }, + + ipprefixv6 : { + title: _('IPv6 prefix'), + visible: false, + value: ' - ' + }, + + addrsv6: { + title: _('IPv6'), + visible: true, + value: [ '-' ] + } + + } + } + }; + + //this.renderUpdateWanData(data[0], false); + //this.renderUpdateWanData(data[1], true); + this.renderUpdateOpenMPTCProuterData(data[4], true); + + return this.renderHtml(this.params.omrvps, 'internet'); + }, + + renderRouterBox: function(data) { + + var boardinfo = data[2], + systeminfo = data[3]; + + var datestr = null; + + if (systeminfo.localtime) { + var date = new Date(systeminfo.localtime * 1000); + + datestr = '%04d-%02d-%02d %02d:%02d:%02d'.format( + date.getUTCFullYear(), + date.getUTCMonth() + 1, + date.getUTCDate(), + date.getUTCHours(), + date.getUTCMinutes(), + date.getUTCSeconds() + ); + } + + this.params.router = { + uptime: { + title: _('Uptime'), + value: systeminfo.uptime ? '%t'.format(systeminfo.uptime) : null, + }, + + localtime: { + title: _('Local Time'), + value: datestr + }, + + load: { + title: _('Load Average'), + value: Array.isArray(systeminfo.load) ? '%.2f, %.2f, %.2f'.format(systeminfo.load[0] / 65535.0,systeminfo.load[1] / 65535.0,systeminfo.load[2] / 65535.0) : null + }, + + kernel: { + title: _('Kernel Version'), + value: boardinfo.kernel + }, + + model: { + title: _('Model'), + value: boardinfo.model + }, + + system: { + title: _('Architecture'), + value: boardinfo.system + }, + + release: { + title: _('Firmware Version'), + value: (typeof boardinfo.release !== "undefined") ? ((typeof boardinfo.release.description !== "undefined") ? boardinfo.release.description : null) : null + } + }; + + return this.renderHtml(this.params.router, 'router'); + }, + + render: function(data) { + return [this.renderInternetBox(data), this.renderRouterBox(data)]; + } +}); diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js new file mode 100755 index 000000000..c673fa681 --- /dev/null +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js @@ -0,0 +1,152 @@ +'use strict'; +'require baseclass'; +'require rpc'; +'require network'; + +var callLuciDHCPLeases = rpc.declare({ + object: 'luci-rpc', + method: 'getDHCPLeases', + expect: { '': {} } +}); + +return baseclass.extend({ + title: _('DHCP Devices'), + + params: {}, + + load: function() { + return Promise.all([ + callLuciDHCPLeases(), + network.getDevices() + ]); + }, + + renderHtml: function() { + + var container_wapper = E('div', { 'class': 'router-status-lan dashboard-bg box-s1' }); + var container_box = E('div', { 'class': 'lan-info devices-list' }); + var container_devices = E('table', { 'class': 'table assoclist devices-info' }, [ + E('tr', { 'class': 'tr table-titles dashboard-bg' }, [ + E('th', { 'class': 'th nowrap' }, _('Hostname')), + E('th', { 'class': 'th' }, _('IP Address')), + E('th', { 'class': 'th' }, _('MAC')), + ]) + ]); + + var container_deviceslist = E('table', { 'class': 'table assoclist devices-info' }); + + container_box.appendChild(E('div', { 'class': 'title'}, [ + E('img', { + 'src': L.resource('view/dashboard/icons/devices.svg'), + 'width': 55, + 'title': this.title, + 'class': 'middle' + }), + E('h3', this.title) + ])); + + for(var idx in this.params.lan.devices) { + var deivce = this.params.lan.devices[idx]; + + container_deviceslist.appendChild(E('tr', { 'class': 'tr cbi-rowstyle-1'}, [ + + E('td', { 'class': 'td device-info'}, [ + E('p', {}, [ + E('span', { 'class': 'd-inline-block'}, [ deivce.hostname ]), + ]), + ]), + + E('td', { 'class': 'td device-info'}, [ + E('p', {}, [ + E('span', { 'class': 'd-inline-block'}, [ deivce.ipv4 ]), + ]), + ]), + + E('td', { 'class': 'td device-info'}, [ + E('p', {}, [ + E('span', { 'class': 'd-inline-block'}, [ deivce.macaddr ]), + ]), + ]) + ])); + } + + if (this.params.lan.devices.length > 0) { + container_box.appendChild(E('hr')); + container_box.appendChild(container_devices); + container_box.appendChild(E('hr')); + container_box.appendChild(container_deviceslist); + container_wapper.appendChild(container_box); + } + + return container_wapper; + }, + + renderUpdateData: function(data, leases) { + + for(var item in data) { + if (/lan|br-lan/ig.test(data[item].ifname) && (typeof data[item].dev == 'object' && !data[item].dev.wireless)) { + var lan_device = data[item]; + var ipv4addr = lan_device.dev.ipaddrs.toString().split('/'); + + this.params.lan.ipv4 = ipv4addr[0] || '?'; + this.params.lan.ipv6 = ipv4addr[0] || '?'; + this.params.lan.macaddr = lan_device.dev.macaddr || '00:00:00:00:00:00'; + this.params.lan.rx_bytes = lan_device.dev.stats.rx_bytes ? '%.2mB'.format(lan_device.dev.stats.rx_bytes) : '-'; + this.params.lan.tx_bytes = lan_device.dev.stats.tx_bytes ? '%.2mB'.format(lan_device.dev.stats.tx_bytes) : '-'; + } + } + + var devices = []; + leases.map(function(lease) { + devices[lease.expires] = { + hostname: lease.hostname || '?', + ipv4: lease.ipaddr || '-', + macaddr: lease.macaddr || '00:00:00:00:00:00', + }; + }); + this.params.lan.devices = devices; + }, + + renderLeases: function(data) { + + var leases = Array.isArray(data[0].dhcp_leases) ? data[0].dhcp_leases : []; + + this.params.lan = { + ipv4: { + title: _('IPv4'), + value: '?' + }, + + macaddr: { + title: _('Mac'), + value: '00:00:00:00:00:00' + }, + + rx_bytes: { + title: _('Upload'), + value: '-' + }, + + tx_bytes: { + title: _('Download'), + value: '-' + }, + + devices: { + title: _('Devices'), + value: [] + } + }; + + this.renderUpdateData(data[1], leases); + + return this.renderHtml(); + }, + + render: function(data) { + if (L.hasSystemFeature('dnsmasq') || L.hasSystemFeature('odhcpd')) + return this.renderLeases(data); + + return E([]); + } +}); diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js new file mode 100755 index 000000000..fe5e843f0 --- /dev/null +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js @@ -0,0 +1,269 @@ +'use strict'; +'require baseclass'; +'require dom'; +'require network'; +'require rpc'; + +return baseclass.extend({ + + title: _('Wireless'), + + params: [], + + load: function() { + return Promise.all([ + network.getWifiDevices(), + network.getWifiNetworks(), + network.getHostHints() + ]).then(function(radios_networks_hints) { + var tasks = []; + + for (var i = 0; i < radios_networks_hints[1].length; i++) + tasks.push(L.resolveDefault(radios_networks_hints[1][i].getAssocList(), []).then(L.bind(function(net, list) { + net.assoclist = list.sort(function(a, b) { return a.mac > b.mac }); + }, this, radios_networks_hints[1][i]))); + + return Promise.all(tasks).then(function() { + return radios_networks_hints; + }); + }); + }, + + renderHtml: function() { + + var container_wapper = E('div', { 'class': 'router-status-wifi dashboard-bg box-s1' }); + var container_box = E('div', { 'class': 'wifi-info devices-list' }); + var container_radio = E('div', { 'class': 'settings-info' }); + var container_radio_item; + + container_box.appendChild(E('div', { 'class': 'title'}, [ + E('img', { + 'src': L.resource('view/dashboard/icons/wireless.svg'), + 'width': 55, + 'title': this.title, + 'class': 'middle' + }), + E('h3', this.title) + ])); + + container_box.appendChild(E('hr')); + + for (var i =0; i < this.params.wifi.radios.length; i++) { + + container_radio_item = E('div', { 'class': 'radio-info' }) + + for(var idx in this.params.wifi.radios[i]) { + var classname = idx, + radio = this.params.wifi.radios[i]; + + if (!radio[idx].visible) { + continue; + } + + if ('actived' === idx) { + classname = radio[idx].value ? 'label label-success' : 'label label-danger'; + radio[idx].value = radio[idx].value ? _('yes') : _('no'); + } + + container_radio_item.appendChild( + E('p', {}, [ + E('span', { 'class': ''}, [ radio[idx].title + ':']), + E('span', { 'class': classname }, [ radio[idx].value ]), + ]) + ); + } + + container_radio.appendChild(container_radio_item); + } + + container_box.appendChild(container_radio); + + var container_devices = E('div', { 'class': 'table assoclist devices-info' }, [ + E('div', { 'class': 'tr table-titles dashboard-bg' }, [ + E('div', { 'class': 'th nowrap' }, _('Hostname')), + E('div', { 'class': 'th' }, _('Wireless')), + E('div', { 'class': 'th' }, _('Signal')), + E('div', { 'class': 'th' }, '%s / %s'.format( _('Up.'), _('Down.'))) + ]) + ]); + + var container_devices_item; + var container_devices_list = E('div', { 'class': 'table assoclist devices-info' }); + + for (var i =0; i < this.params.wifi.devices.length; i++) { + container_devices_item = E('div', { 'class': 'tr cbi-rowstyle-1' }); + + for(var idx in this.params.wifi.devices[i]) { + var device = this.params.wifi.devices[i]; + + if (!device[idx].visible) { + continue; + } + + var container_content; + + if ('progress' == idx) { + container_content = E('div', { 'class' : 'td device-info' }, [ + E('div', { 'class': 'progress' }, [ + E('div', { 'class': 'progress-bar ' + device[idx].value.style, role: 'progressbar', style: 'width:'+device[idx].value.qualite+'%', 'aria-valuenow': device[idx].value.qualite, 'aria-valuemin': 0, 'aria-valuemax': 100 }), + ]) + ]); + } else if ('rate' == idx) { + container_content = E('div', { 'class': 'td device-info' }, [ + E('p', {}, [ + E('span', { 'class': ''}, [ device[idx].value.rx ]), + E('br'), + E('span', { 'class': ''}, [ device[idx].value.tx ]) + ]) + ]); + } else { + container_content = E('div', { 'class': 'td device-info'}, [ + E('p', {}, [ + E('span', { 'class': ''}, [ device[idx].value ]), + ]) + ]); + } + + container_devices_item.appendChild(container_content); + } + + container_devices_list.appendChild(container_devices_item); + } + + if (this.params.wifi.devices.length > 0) { + container_devices.appendChild(container_devices_list); + container_box.appendChild(E('hr')); + container_box.appendChild(container_devices); + container_box.appendChild(container_devices_list); + container_wapper.appendChild(container_box); + } + + return container_wapper; + }, + + renderUpdateData: function(radios, networks, hosthints) { + + for (var i = 0; i < radios.sort(function(a, b) { a.getName() > b.getName() }).length; i++) { + var network_items = networks.filter(function(net) { return net.getWifiDeviceName() == radios[i].getName() }); + + for (var j = 0; j < network_items.length; j++) { + var net = network_items[j], + is_assoc = (net.getBSSID() != '00:00:00:00:00:00' && net.getChannel() && !net.isDisabled()), + chan = net.getChannel(), + freq = net.getFrequency(), + rate = net.getBitRate(); + + this.params.wifi.radios.push( + { + ssid : { + title: _('SSID'), + visible: true, + value: net.getActiveSSID() || '?' + }, + + actived : { + title: _('Active'), + visible: true, + value: !net.isDisabled() + }, + + chan : { + title: _('Channel'), + visible: true, + value: chan ? '%d (%.3f %s)'.format(chan, freq, _('GHz')) : '-' + }, + + rate : { + title: _('Bitrate'), + visible: true, + value: rate ? '%d %s'.format(rate, _('Mbit/s')) : '-' + }, + + bssid : { + title: _('BSSID'), + visible: true, + value: is_assoc ? (net.getActiveBSSID() || '-') : '-' + }, + + encryption : { + title: _('Encryption'), + visible: true, + value: is_assoc ? net.getActiveEncryption() : '-' + }, + + associations : { + title: _('Devices Connected'), + visible: true, + value: is_assoc ? (net.assoclist.length || '0') : 0 + } + } + ); + } + } + + for (var i = 0; i < networks.length; i++) { + for (var k = 0; k < networks[i].assoclist.length; k++) { + var bss = networks[i].assoclist[k], + name = hosthints.getHostnameByMACAddr(bss.mac); + + var progress_style; + var q = Math.min((bss.signal + 110) / 70 * 100, 100); + + if (q == 0 || q < 25) + progress_style = 'bg-danger'; + else if (q < 50) + progress_style = 'bg-warning'; + else if (q < 75) + progress_style = 'bg-success'; + else + progress_style = 'bg-success'; + + this.params.wifi.devices.push( + { + hostname : { + title: _('Hostname'), + visible: true, + value: name || '?' + }, + + ssid : { + title: _('SSID'), + visible: true, + value: networks[i].getActiveSSID() + }, + + progress : { + title: _('Channel'), + visible: true, + value: { + qualite: q, + style: progress_style + } + }, + + rate : { + title: _('Bitrate'), + visible: true, + value: { + rx: '%s'.format('%.2mB'.format(bss.rx.bytes)), + tx: '%s'.format('%.2mB'.format(bss.tx.bytes)), + } + } + } + ); + } + } + }, + + render: function(data) { + + this.params.wifi = { + radios: [], + devices: [] + }; + + this.renderUpdateData(data[0], data[1], data[2]); + + return this.renderHtml(); + } +}); diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/index.js b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/index.js new file mode 100755 index 000000000..c3e3b7027 --- /dev/null +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/index.js @@ -0,0 +1,110 @@ +'use strict'; +'require view'; +'require dom'; +'require poll'; +'require fs'; +'require network'; + +document.querySelector('head').appendChild(E('link', { + 'rel': 'stylesheet', + 'type': 'text/css', + 'href': L.resource('view/dashboard/css/custom.css') +})); + +function invokeIncludesLoad(includes) { + var tasks = [], has_load = false; + + for (var i = 0; i < includes.length; i++) { + if (typeof(includes[i].load) == 'function') { + tasks.push(includes[i].load().catch(L.bind(function() { + this.failed = true; + }, includes[i]))); + + has_load = true; + } + else { + tasks.push(null); + } + } + + return has_load ? Promise.all(tasks) : Promise.resolve(null); +} + +function startPolling(includes, containers) { + var step = function() { + return network.flushCache().then(function() { + return invokeIncludesLoad(includes); + }).then(function(results) { + for (var i = 0; i < includes.length; i++) { + var content = null; + + if (includes[i].failed) + continue; + + if (typeof(includes[i].render) == 'function') + content = includes[i].render(results ? results[i] : null); + else if (includes[i].content != null) + content = includes[i].content; + + if (content != null) { + + if (i > 1) { + dom.append(containers[1], content); + } else { + containers[i].parentNode.style.display = ''; + containers[i].parentNode.classList.add('fade-in'); + containers[i].parentNode.classList.add('Dashboard'); + dom.content(containers[i], content); + } + } + } + + var ssi = document.querySelector('div.includes'); + if (ssi) { + ssi.style.display = ''; + ssi.classList.add('fade-in'); + } + }); + }; + + return step().then(function() { + poll.add(step); + }); +} + +return view.extend({ + load: function() { + return L.resolveDefault(fs.list('/www' + L.resource('view/dashboard/include')), []).then(function(entries) { + return Promise.all(entries.filter(function(e) { + return (e.type == 'file' && e.name.match(/\.js$/)); + }).map(function(e) { + return 'view.dashboard.include.' + e.name.replace(/\.js$/, ''); + }).sort().map(function(n) { + return L.require(n); + })); + }); + }, + + render: function(includes) { + var rv = E([]), containers = []; + + for (var i = 0; i < includes.length - 1; i++) { + + var container = E('div', { 'class': 'section-content' }); + + rv.appendChild(E('div', { 'class': 'cbi-section-' + i, 'style': 'display:none' }, [ + container + ])); + + containers.push(container); + } + + return startPolling(includes, containers).then(function() { + return rv; + }); + }, + + handleSaveApply: null, + handleSave: null, + handleReset: null +}); diff --git a/luci-mod-dashboard/po/fr/dashboard.po b/luci-mod-dashboard/po/fr/dashboard.po new file mode 100755 index 000000000..ee91c668b --- /dev/null +++ b/luci-mod-dashboard/po/fr/dashboard.po @@ -0,0 +1,223 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2022-02-19 07:53+0000\n" +"Last-Translator: Weblate Admin \n" +"Language-Team: French \n" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.6.1\n" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:165 +msgid "Active" +msgstr "Actif" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:368 +msgid "Architecture" +msgstr "Architecture" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:183 +msgid "BSSID" +msgstr "BSSID" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:177 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:245 +msgid "Bitrate" +msgstr "Débit" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:171 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:236 +msgid "Channel" +msgstr "Canal" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:277 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:293 +msgid "Connected" +msgstr "Connecté" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:13 +msgid "DHCP Devices" +msgstr "Périphériques DHCP" + +#: luci-mod-dashboard/root/usr/share/luci/menu.d/luci-mod-dashboard.json:3 +msgid "Dashboard" +msgstr "Tableau de bord" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:136 +msgid "Devices" +msgstr "Périphériques" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:195 +msgid "Devices Connected" +msgstr "Périphériques connectés" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:86 +msgid "Down." +msgstr "En panne." + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:131 +msgid "Download" +msgstr "Téléchargement" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:189 +msgid "Encryption" +msgstr "Chiffrement" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:373 +msgid "Firmware Version" +msgstr "Version du micrologiciel" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:173 +msgid "GHz" +msgstr "GHz" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:25 +msgid "Grant access to DHCP status display" +msgstr "Permettre l'accès à l'affichage de l'état DHCP" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:12 +msgid "Grant access to main status display" +msgstr "Permettre l'accès à l'affichage de l'état principal" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:3 +msgid "Grant access to the system route status" +msgstr "Permettre l’accès au status de routage" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:34 +msgid "Grant access to wireless status display" +msgstr "Permettre l'accès du status WIFI" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:30 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:83 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:224 +msgid "Hostname" +msgstr "Nom d'hôte" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:31 +msgid "IP Address" +msgstr "Adresse IP" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:283 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:116 +msgid "IPv4" +msgstr "IPv4" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:274 +msgid "IPv4 Internet" +msgstr "Internet IPv4" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:305 +msgid "IPv6" +msgstr "IPv6" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:290 +msgid "IPv6 Internet" +msgstr "Internet IPv6" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:299 +msgid "IPv6 prefix" +msgstr "Préfixe IPv6" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:41 +msgid "Internet" +msgstr "Internet" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:358 +msgid "Kernel Version" +msgstr "Version du noyau" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:241 +msgid "Load" +msgstr "Charge" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:353 +msgid "Load Average" +msgstr "Charge moyenne" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:348 +msgid "Local Time" +msgstr "Heure locale" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:32 +msgid "MAC" +msgstr "MAC" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:121 +msgid "Mac" +msgstr "Mac" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:179 +msgid "Mbit/s" +msgstr "Mbit/s" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:363 +msgid "Model" +msgstr "Modèle" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:195 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:202 +msgid "Not connected" +msgstr "Non connecté" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:253 +msgid "Proxy traffic" +msgstr "Trafic proxy" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:159 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:230 +msgid "SSID" +msgstr "SSID" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:232 +msgid "Server" +msgstr "Serveur" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:85 +msgid "Signal" +msgstr "Signal" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:41 +msgid "System" +msgstr "Système" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:265 +msgid "Total traffic" +msgstr "Trafic total" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:86 +msgid "Up." +msgstr "En ligne." + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:126 +msgid "Upload" +msgstr "Téléverser" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:247 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:343 +msgid "Uptime" +msgstr "Temps de service" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:259 +msgid "VPN traffic" +msgstr "Trafic VPN" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:235 +msgid "Version" +msgstr "Version" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:9 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:84 +msgid "Wireless" +msgstr "Sans-fil" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:101 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:65 +msgid "no" +msgstr "non" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:101 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:65 +msgid "yes" +msgstr "oui" diff --git a/luci-mod-dashboard/po/ru/dashboard.po b/luci-mod-dashboard/po/ru/dashboard.po new file mode 100755 index 000000000..466e9ab42 --- /dev/null +++ b/luci-mod-dashboard/po/ru/dashboard.po @@ -0,0 +1,224 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-06-16 10:51+0000\n" +"Last-Translator: Dmitry Galenko \n" +"Language-Team: Russian \n" +"Language: ru\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.6.1\n" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:165 +msgid "Active" +msgstr "Активный" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:368 +msgid "Architecture" +msgstr "Процессор" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:183 +msgid "BSSID" +msgstr "BSSID" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:177 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:245 +msgid "Bitrate" +msgstr "Скорость" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:171 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:236 +msgid "Channel" +msgstr "Канал" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:277 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:293 +msgid "Connected" +msgstr "Подключено" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:13 +msgid "DHCP Devices" +msgstr "Устройства DHCP" + +#: luci-mod-dashboard/root/usr/share/luci/menu.d/luci-mod-dashboard.json:3 +msgid "Dashboard" +msgstr "Дашборд" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:136 +msgid "Devices" +msgstr "Устройства" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:195 +msgid "Devices Connected" +msgstr "Подключенные устройства" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:86 +msgid "Down." +msgstr "Не работает." + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:131 +msgid "Download" +msgstr "Получение" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:189 +msgid "Encryption" +msgstr "Шифрование" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:373 +msgid "Firmware Version" +msgstr "Версия ПО" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:173 +msgid "GHz" +msgstr "GHz" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:25 +msgid "Grant access to DHCP status display" +msgstr "Разрешить просмотр информации о DHCP" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:12 +msgid "Grant access to main status display" +msgstr "Разрешить просмотр информации основной информации" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:3 +msgid "Grant access to the system route status" +msgstr "Разрешить просмотр информации о маршрутах" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:34 +msgid "Grant access to wireless status display" +msgstr "Разрешить просмотр информации о беспроводных сетях" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:30 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:83 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:224 +msgid "Hostname" +msgstr "Имя хоста" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:31 +msgid "IP Address" +msgstr "IP-адрес" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:283 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:116 +msgid "IPv4" +msgstr "IPv4" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:274 +msgid "IPv4 Internet" +msgstr "IPv4 Internet" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:305 +msgid "IPv6" +msgstr "IPv6" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:290 +msgid "IPv6 Internet" +msgstr "IPv6 Internet" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:299 +msgid "IPv6 prefix" +msgstr "Префикс IPv6" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:41 +msgid "Internet" +msgstr "Internet" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:358 +msgid "Kernel Version" +msgstr "Версия ядра" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:241 +msgid "Load" +msgstr "Загрузка" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:353 +msgid "Load Average" +msgstr "Средняя загрузка" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:348 +msgid "Local Time" +msgstr "Время хоста" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:32 +msgid "MAC" +msgstr "MAC" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:121 +msgid "Mac" +msgstr "Mac" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:179 +msgid "Mbit/s" +msgstr "Mbit/s" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:363 +msgid "Model" +msgstr "Модель" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:195 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:202 +msgid "Not connected" +msgstr "Не подключено" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:253 +msgid "Proxy traffic" +msgstr "Трафик через прокси" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:159 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:230 +msgid "SSID" +msgstr "SSID" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:232 +msgid "Server" +msgstr "Сервер" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:85 +msgid "Signal" +msgstr "Сигнал" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:41 +msgid "System" +msgstr "Система" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:265 +msgid "Total traffic" +msgstr "Трафик всего" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:86 +msgid "Up." +msgstr "Работает." + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:126 +msgid "Upload" +msgstr "Отправка" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:247 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:343 +msgid "Uptime" +msgstr "Uptime" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:259 +msgid "VPN traffic" +msgstr "Трафик VPN" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:235 +msgid "Version" +msgstr "Версия" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:9 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:84 +msgid "Wireless" +msgstr "Безпроводной" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:101 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:65 +msgid "no" +msgstr "нет" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:101 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:65 +msgid "yes" +msgstr "да" diff --git a/luci-mod-dashboard/po/templates/dashboard.pot b/luci-mod-dashboard/po/templates/dashboard.pot new file mode 100755 index 000000000..018a75101 --- /dev/null +++ b/luci-mod-dashboard/po/templates/dashboard.pot @@ -0,0 +1,214 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:165 +msgid "Active" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:368 +msgid "Architecture" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:183 +msgid "BSSID" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:177 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:245 +msgid "Bitrate" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:171 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:236 +msgid "Channel" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:277 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:293 +msgid "Connected" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:13 +msgid "DHCP Devices" +msgstr "" + +#: luci-mod-dashboard/root/usr/share/luci/menu.d/luci-mod-dashboard.json:3 +msgid "Dashboard" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:136 +msgid "Devices" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:195 +msgid "Devices Connected" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:86 +msgid "Down." +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:131 +msgid "Download" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:189 +msgid "Encryption" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:373 +msgid "Firmware Version" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:173 +msgid "GHz" +msgstr "" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:25 +msgid "Grant access to DHCP status display" +msgstr "" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:12 +msgid "Grant access to main status display" +msgstr "" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:3 +msgid "Grant access to the system route status" +msgstr "" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:34 +msgid "Grant access to wireless status display" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:30 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:83 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:224 +msgid "Hostname" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:31 +msgid "IP Address" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:283 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:116 +msgid "IPv4" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:274 +msgid "IPv4 Internet" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:305 +msgid "IPv6" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:290 +msgid "IPv6 Internet" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:299 +msgid "IPv6 prefix" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:41 +msgid "Internet" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:358 +msgid "Kernel Version" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:241 +msgid "Load" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:353 +msgid "Load Average" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:348 +msgid "Local Time" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:32 +msgid "MAC" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:121 +msgid "Mac" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:179 +msgid "Mbit/s" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:363 +msgid "Model" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:195 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:202 +msgid "Not connected" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:253 +msgid "Proxy traffic" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:159 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:230 +msgid "SSID" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:232 +msgid "Server" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:85 +msgid "Signal" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:41 +msgid "System" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:265 +msgid "Total traffic" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:86 +msgid "Up." +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:126 +msgid "Upload" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:247 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:343 +msgid "Uptime" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:259 +msgid "VPN traffic" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:235 +msgid "Version" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:9 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:84 +msgid "Wireless" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:101 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:65 +msgid "no" +msgstr "" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:101 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:65 +msgid "yes" +msgstr "" diff --git a/luci-mod-dashboard/po/zh_Hans/dashboard.po b/luci-mod-dashboard/po/zh_Hans/dashboard.po new file mode 100755 index 000000000..4da85b2c8 --- /dev/null +++ b/luci-mod-dashboard/po/zh_Hans/dashboard.po @@ -0,0 +1,223 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2021-06-02 09:51+0000\n" +"Last-Translator: antrouter \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.6.1\n" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:165 +msgid "Active" +msgstr "激活" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:368 +msgid "Architecture" +msgstr "构架" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:183 +msgid "BSSID" +msgstr "BSSID" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:177 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:245 +msgid "Bitrate" +msgstr "比特率" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:171 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:236 +msgid "Channel" +msgstr "频道" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:277 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:293 +msgid "Connected" +msgstr "连接" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:13 +msgid "DHCP Devices" +msgstr "DHCP 设备" + +#: luci-mod-dashboard/root/usr/share/luci/menu.d/luci-mod-dashboard.json:3 +msgid "Dashboard" +msgstr "仪表盘" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:136 +msgid "Devices" +msgstr "设备" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:195 +msgid "Devices Connected" +msgstr "连接的设备" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:86 +msgid "Down." +msgstr "下." + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:131 +msgid "Download" +msgstr "下载" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:189 +msgid "Encryption" +msgstr "加密" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:373 +msgid "Firmware Version" +msgstr "固件版本" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:173 +msgid "GHz" +msgstr "Ghz" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:25 +msgid "Grant access to DHCP status display" +msgstr "授予访问 DHCP 状态显示的权限" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:12 +msgid "Grant access to main status display" +msgstr "授予访问主状态显示的权限" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:3 +msgid "Grant access to the system route status" +msgstr "授予对系统路由状态的访问权限" + +#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:34 +msgid "Grant access to wireless status display" +msgstr "授予访问无线状态显示的权限" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:30 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:83 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:224 +msgid "Hostname" +msgstr "主机名" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:31 +msgid "IP Address" +msgstr "IP地址" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:283 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:116 +msgid "IPv4" +msgstr "IPv4" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:274 +msgid "IPv4 Internet" +msgstr "IPv4互联网" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:305 +msgid "IPv6" +msgstr "IPv6" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:290 +msgid "IPv6 Internet" +msgstr "IPv6互联网" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:299 +msgid "IPv6 prefix" +msgstr "IPv6前缀" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:41 +msgid "Internet" +msgstr "互联网" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:358 +msgid "Kernel Version" +msgstr "内核版本" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:241 +msgid "Load" +msgstr "负载" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:353 +msgid "Load Average" +msgstr "平均负载" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:348 +msgid "Local Time" +msgstr "本地时间" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:32 +msgid "MAC" +msgstr "MAC地址" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:121 +msgid "Mac" +msgstr "mac地址" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:179 +msgid "Mbit/s" +msgstr "Mbit/s" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:363 +msgid "Model" +msgstr "型号" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:195 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:202 +msgid "Not connected" +msgstr "未连接" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:253 +msgid "Proxy traffic" +msgstr "代理流量" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:159 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:230 +msgid "SSID" +msgstr "SSID" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:232 +msgid "Server" +msgstr "服务器" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:85 +msgid "Signal" +msgstr "信号" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:41 +msgid "System" +msgstr "系统" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:265 +msgid "Total traffic" +msgstr "总流量" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:86 +msgid "Up." +msgstr "上." + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:126 +msgid "Upload" +msgstr "上传" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:247 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:343 +msgid "Uptime" +msgstr "开机时间" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:259 +msgid "VPN traffic" +msgstr "VPN流量" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:235 +msgid "Version" +msgstr "版本" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:9 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:84 +msgid "Wireless" +msgstr "无线" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:101 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:65 +msgid "no" +msgstr "否" + +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:101 +#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:65 +msgid "yes" +msgstr "是" diff --git a/luci-mod-dashboard/root/usr/share/luci/menu.d/luci-mod-dashboard.json b/luci-mod-dashboard/root/usr/share/luci/menu.d/luci-mod-dashboard.json new file mode 100755 index 000000000..555884674 --- /dev/null +++ b/luci-mod-dashboard/root/usr/share/luci/menu.d/luci-mod-dashboard.json @@ -0,0 +1,13 @@ +{ + "admin/dashboard": { + "title": "Dashboard", + "order": 1, + "action": { + "type": "view", + "path": "dashboard/index" + }, + "depends": { + "acl": [ "luci-mod-dashboard-index" ] + } + } +} diff --git a/luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json b/luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json new file mode 100755 index 000000000..1f331e7b4 --- /dev/null +++ b/luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json @@ -0,0 +1,41 @@ +{ + "luci-mod-dashboard-routes": { + "description": "Grant access to the system route status", + "read": { + "ubus": { + "file": [ "exec" ] + } + } + }, + + "luci-mod-dashboard-index": { + "description": "Grant access to main status display", + "read": { + "file": { + "/www/luci-static/resources/view/status/include": [ "list" ] + }, + "ubus": { + "file": [ "list", "read" ], + "system": [ "board", "info" ] + } + } + }, + + "luci-mod-dashboard-index-dhcp": { + "description": "Grant access to DHCP status display", + "read": { + "ubus": { + "luci-rpc": [ "getDHCPLeases" ] + } + } + }, + + "luci-mod-dashboard-index-wifi": { + "description": "Grant access to wireless status display", + "read": { + "ubus": { + "iwinfo": [ "assoclist" ] + } + } + } +} diff --git a/luci-proto-mbim/Makefile b/luci-proto-mbim/Makefile old mode 100644 new mode 100755 diff --git a/luci-proto-mbim/htdocs/luci-static/resources/protocol/mbim.js b/luci-proto-mbim/htdocs/luci-static/resources/protocol/mbim.js old mode 100644 new mode 100755 index f6f548cc6..72bb9f7ba --- a/luci-proto-mbim/htdocs/luci-static/resources/protocol/mbim.js +++ b/luci-proto-mbim/htdocs/luci-static/resources/protocol/mbim.js @@ -51,8 +51,7 @@ return network.registerProtocol('mbim', { renderFormOptions: function(s) { var dev = this.getL3Device() || this.getDevice(), o; - o = s.taboption('general', form.Value, '_modem_device', _('Modem device')); - o.ucioption = 'device'; + o = s.taboption('general', form.Value, 'device', _('Modem device')); o.rmempty = false; o.load = function(section_id) { return callFileList('/dev/').then(L.bind(function(devices) { @@ -62,22 +61,14 @@ return network.registerProtocol('mbim', { }, this)); }; - o = s.taboption('general', form.Value, 'apn', _('APN')); - o.validate = function(section_id, value) { - if (!/^[a-zA-Z0-9\-.]*[a-zA-Z0-9]$/.test(value)) - return _('Invalid APN provided'); - - return true; - }; - - o = s.taboption('general', form.Value, 'pincode', _('PIN')); - o.datatype = 'and(uinteger,minlength(4),maxlength(8))'; + s.taboption('general', form.Value, 'apn', _('APN')); + s.taboption('general', form.Value, 'pincode', _('PIN')); o = s.taboption('general', form.ListValue, 'auth', _('Authentication Type')); - o.value('both', _('PAP/CHAP')); - o.value('pap', _('PAP')); - o.value('chap', _('CHAP')); - o.value('none', _('None')); + o.value('both', 'PAP/CHAP'); + o.value('pap', 'PAP'); + o.value('chap', 'CHAP'); + o.value('none', 'NONE'); o.default = 'none'; o = s.taboption('general', form.Value, 'username', _('PAP/CHAP username')); @@ -91,62 +82,19 @@ return network.registerProtocol('mbim', { o.depends('auth', 'both'); o.password = true; - o = s.taboption('general', form.ListValue, 'pdptype', _('PDP Type')); - o.value('ipv4v6', _('IPv4/IPv6')); - o.value('ipv4', _('IPv4')); - o.value('ipv6', _('IPv6')); - o.default = 'ipv4v6'; - if (L.hasSystemFeature('ipv6')) { - o = s.taboption('advanced', form.Flag, 'mbim_ipv6', _('Enable IPv6 negotiation')); - o.ucioption = 'ipv6'; - o.default = o.enabled; - } - - o = s.taboption('advanced', form.ListValue, 'dhcp', _('Use DHCP')); - o.value('', _('Automatic')); - o.value('0', _('Disabled')); - o.value('1', _('Enabled')); - o.depends('pdptype', 'ipv4'); - o.depends('pdptype', 'ipv4v6'); - o.default = ''; - - if (L.hasSystemFeature('ipv6')) { - o = s.taboption('advanced', form.ListValue, 'dhcpv6', _('Use DHCPv6')); - o.value('', _('Automatic')); - o.value('0', _('Disabled')); - o.value('1', _('Enabled')); - o.depends('pdptype', 'ipv6'); - o.depends('pdptype', 'ipv4v6'); - o.default = ''; + o = s.taboption('advanced', form.Flag, 'ipv6', _('Enable IPv6 negotiation')); + o.default = o.disabled; } o = s.taboption('advanced', form.Value, 'delay', _('Modem init timeout'), _('Maximum amount of seconds to wait for the modem to become ready')); o.placeholder = '10'; o.datatype = 'min(1)'; - o = s.taboption('advanced', form.Value, 'mtu', _('Override MTU')); - o.placeholder = dev ? (dev.getMTU() || '1500') : '1500'; - o.datatype = 'max(9200)'; - - o = s.taboption('advanced', form.Flag, 'defaultroute', - _('Use default gateway'), - _('If unchecked, no default route is configured')); - o.default = o.enabled; - - o = s.taboption('advanced', form.Value, 'metric', - _('Use gateway metric')); - o.placeholder = '0'; - o.datatype = 'uinteger'; - o.depends('defaultroute', '1'); - - o = s.taboption('advanced', form.Flag, 'peerdns', - _('Use DNS servers advertised by peer'), - _('If unchecked, the advertised DNS server addresses are ignored')); - o.default = o.enabled; - - o = s.taboption('advanced', form.DynamicList, 'dns', _('Use custom DNS servers')); - o.depends('peerdns', '0'); - o.datatype = 'ipaddr'; + o = s.taboption('general', form.ListValue, 'pdptype', _('PDP Type')); + o.value('ipv4v6', 'IPv4/IPv6'); + o.value('ipv4', 'IPv4'); + o.value('ipv6', 'IPv6'); + o.default = 'ipv4v6'; } }); diff --git a/luci-theme-argon/LICENSE b/luci-theme-argon/LICENSE new file mode 100755 index 000000000..261eeb9e9 --- /dev/null +++ b/luci-theme-argon/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/luci-theme-argon/Makefile b/luci-theme-argon/Makefile new file mode 100755 index 000000000..44702ea88 --- /dev/null +++ b/luci-theme-argon/Makefile @@ -0,0 +1,16 @@ +# +# Copyright (C) 2008-2019 Jerrykuku +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Argon Theme +LUCI_DEPENDS:=+curl +jsonfilter +PKG_VERSION:=2.2.9.4 +PKG_RELEASE:=20220425 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-theme-argon/README.md b/luci-theme-argon/README.md new file mode 100755 index 000000000..5eb85b2c3 --- /dev/null +++ b/luci-theme-argon/README.md @@ -0,0 +1,114 @@ +
+ +

+ A new LuCI theme for OpenWrt +

+

+ Argon is a clean HTML5 theme for LuCI. Users may
setup their own favorite logins, including beautiful
pics and customized mp4 videos.

+

+ + + + + + + + + + + + + + +
+
+
+ +
+ +
English | [简体中文](README_ZH.md) + +## Notice +It is strongly recommended to use the Chrome browser. Some new css3 features are used in the theme, and currently only Chrome has the best compatibility. +The mainline version of IE series currently has bugs to be resolved. +FireFox does not enable the backdrop-filter by default, see here for the opening method: https://developer.mozilla.org/zh-CN/docs/Web/CSS/backdrop-filter + +v2.x.x Adapt to official mainline snapshot. +You can checkout branch 18.06 for OpenWRT 18.06 or lean 19.07. + +## Update Log 2021.10.16 v2.2.9 + +- 【v2.2.9】Fix the problem that the menu could not pop up in mobile mode +- 【v2.2.9】Unify the settings of css spacing +- 【v2.2.9】Refactored the code of the login page +- 【v2.2.8】Fix the problem that the Minify Css option is turned on when compiling, which causes the frosted glass effect to be invalid and the logo font is lost. +- 【v2.2.5】New config app for argon theme. You can set the blur and transparency of the login page of argon theme, and manage the background pictures and videos.[Chrome is recommended] [Download](https://github.com/jerrykuku/luci-app-argon-config/releases/download/v0.8-beta/luci-app-argon-config_0.8-beta_all.ipk) +- 【v2.2.5】Automatically set as the default theme when compiling. +- 【v2.2.5】Modify the file structure to adapt to luci-app-argon-config. The old method of turning on dark mode is no longer applicable, please use it with luci-app-argon-config. +- 【v2.2.5】Adapt to Koolshare lede 2.3.6。 +- 【v2.2.5】Fix some Bug。 +- 【v2.2.4】Fix the problem that the login background cannot be displayed on some phones. +- 【v2.2.4】Remove the dependency of luasocket. +- 【v2.2.3】Fix Firmware flash page display error in dark mode. +- 【v2.2.3】Update font icon, add a default icon of undefined menu. +- 【v2.2.2】Add custom login background,put your image (allow png jpg gif) or MP4 video into /www/luci-static/argon/background, random change. +- 【v2.2.2】Add force dark mode, login ssh and type "touch /etc/dark" to open dark mode. +- 【v2.2.2】Add a volume mute button for video background, default is muted. +- 【v2.2.2】fix login page when keyboard show the bottom text overlay the button on mobile. +- 【v2.2.2】fix select color in dark mode,and add a style for scrollbar. +- 【v2.2.2】jquery update to v3.5.1. +- 【v2.2.2】change request bing api method form wget to luasocket (DEPENDS). +- 【v2.2.1】Add blur effect for login form. +- 【v2.2.1】New login theme, Request background imge from bing.com, Auto change everyday. +- 【v2.2.1】New theme icon. +- 【v2.2.1】Add more menu category icon. +- 【v2.2.1】Fix font-size and padding margin. +- 【v2.2.1】Restructure css file. +- 【v2.2.1】Auto adapt to dark mode. + +## How to build + +Enter in your openwrt/package/lean or other + +### Lean lede + +``` +cd lede/package/lean +rm -rf luci-theme-argon +git clone -b 18.06 https://github.com/jerrykuku/luci-theme-argon.git +make menuconfig #choose LUCI->Theme->Luci-theme-argon +make -j1 V=s +``` + +### Openwrt official SnapShots + +``` +cd openwrt/package +git clone https://github.com/jerrykuku/luci-theme-argon.git +make menuconfig #choose LUCI->Theme->Luci-theme-argon +make -j1 V=s +``` + +## How to Install + +### For Lean openwrt 18.06 LuCI + +``` +wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v1.7.3/luci-theme-argon-18.06_1.7.3-20220421_all.ipk +opkg install luci-theme-argon*.ipk +``` + +### For openwrt official 19.07 Snapshots LuCI master + +``` +opkg install luci-compat +opkg install luci-lib-ipkg +wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.2.9/luci-theme-argon_2.2.9-20211016-1_all.ipk +opkg install luci-theme-argon*.ipk +``` +![](/Screenshots/screenshot_pc.jpg) +![](/Screenshots/screenshot_phone.jpg) + +## Thanks to + +luci-theme-material: https://github.com/LuttyYang/luci-theme-material/ diff --git a/luci-theme-argon/README_ZH.md b/luci-theme-argon/README_ZH.md new file mode 100755 index 000000000..d66866711 --- /dev/null +++ b/luci-theme-argon/README_ZH.md @@ -0,0 +1,110 @@ +
+ +

+ 全新的 Openwrt 主题 +

+

+ Argon 是一个干净整洁的Openwrt主题,用户可以自定义登录界面,
包含图片或者视频,同时支持深色浅色的自动与手动切换 +

+ + + + + + + + + + + + + + +
+ +![](/Screenshots/screenshot_pc.jpg) +![](/Screenshots/screenshot_phone.jpg) + + +## 注意 +强烈建议使用Chrome 浏览器。主题中使用了一些新的css3特性,目前只有Chrome有最佳的兼容性。 +主线版本 IE 系列目前还有Bug有待解决。 +FireFox 默认不开启backdrop-filter,开启方法见这里:https://developer.mozilla.org/zh-CN/docs/Web/CSS/backdrop-filter +当前master版本基于官方 OpenWrt 19.07.1 稳定版固件进行移植适配。 +v2.x.x 适配主线快照版本。 +v1.x.x 适配18.06 和 Lean Openwrt [如果你是lean代码 请选择这个版本] + + +## 更新日志 2021.10.16 v2.2.9 + +- 【v2.2.9】修复了在手机模式下无法弹出菜单的bug +- 【v2.2.9】统一css间距的设置 +- 【v2.2.9】重构了登录页面的代码 +- 【v2.2.9】为导航菜单添加滑动效果 +- 【v2.2.8】修复编译时打开Minify Css选项,导致磨砂玻璃效果无效,logo字体丢失的问题 +- 【v2.2.5】全新的设置app.你可以设置argon 主题的登录页面的模糊和透明度,并管理背景图片与视频。[建议使用 Chrome][点击下载](https://github.com/jerrykuku/luci-app-argon-config/releases/download/v0.8-beta/luci-app-argon-config_0.8-beta_all.ipk) +- 【v2.2.5】当编译固件时,将自动设置为默认主题。 +- 【v2.2.5】修改文件结构,以适应luci-app-argon-config,旧的开启暗色模式方法将不再适用,请搭配luci-app-argon-config使用。 +- 【v2.2.5】适配Koolshare lede 2.3.6。 +- 【v2.2.5】修复了一些Bug。 +- 【v2.2.4】修复了在某些手机下图片背景第一次加载不能显示的问题。 +- 【v2.2.4】取消 luasocket 的依赖,无需再担心依赖问题。 +- 【v2.2.3】修正了在暗色模式下,固件刷写弹窗内的显示错误。 +- 【v2.2.3】更新了图标库,为未定义的菜单增加了一个默认的图标。 +- 【v2.2.2】背景文件策略调整为,同时接受 jpg png gif mp4, 自行上传文件至 /www/luci-static/argon/background 图片和视频同时随机。 +- 【v2.2.2】增加强制暗色模式,进入ssh 输入 "touch /etc/dark" 进行开启。 +- 【v2.2.2】视频背景加了一个音量开关,喜欢带声音的可以自行点击开启,默认为静音模式。 +- 【v2.2.2】修复了手机模式下,登录页面出现键盘时,文字覆盖按钮的问题。 +- 【v2.2.2】修正了暗黑模式下下拉选项的背景颜色,同时修改了滚动条的样式。 +- 【v2.2.2】jquery 更新到 v3.5.1。 +- 【v2.2.2】获取Bing Api 的方法从wget 更新到luasocket 并添加依赖。 +- 【v2.2.1】登录背景添加毛玻璃效果。 +- 【v2.2.1】全新的登录界面,图片背景跟随Bing.com,每天自动切换。 +- 【v2.2.1】全新的主题icon。 +- 【v2.2.1】增加多个导航icon。 +- 【v2.2.1】细致的微调了 字号大小边距等等。 +- 【v2.2.1】重构了css文件。 +- 【v2.2.1】自动适应的暗黑模式。 + +## 如何编译 + +进入 openwrt/package/lean 或者其他目录 + +### Lean源码 + +``` +cd lede/package/lean +rm -rf luci-theme-argon +git clone -b 18.06 https://github.com/jerrykuku/luci-theme-argon.git +make menuconfig #choose LUCI->Theme->Luci-theme-argon +make -j1 V=s +``` + +### Openwrt 官方源码 + +``` +cd openwrt/package +git clone https://github.com/jerrykuku/luci-theme-argon.git +make menuconfig #choose LUCI->Theme->Luci-theme-argon +make -j1 V=s +``` + +## 如何安装 + +### Lean源码 + +``` +wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v1.7.0/luci-theme-argon_1.7.0-20200909_all.ipk +opkg install luci-theme-argon*.ipk +``` + +### For openwrt official 19.07 Snapshots LuCI master + +``` +wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.2.5/luci-theme-argon_2.2.5-20200914_all.ipk +opkg install luci-theme-argon*.ipk +``` + +## 感谢 + +luci-theme-material: https://github.com/LuttyYang/luci-theme-material/ diff --git a/luci-theme-argon/Screenshots/screenshot_pc.jpg b/luci-theme-argon/Screenshots/screenshot_pc.jpg new file mode 100755 index 0000000000000000000000000000000000000000..4c355449a3aa732fd06f2b69fd6f6bd1f0342647 GIT binary patch literal 673706 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 <9F z@$-q;DyGAsd1+2Sn+s=IT_WGw`SuLXi(7Ao-%Pw)o|2j zLEf!SClihe70v5a4jEezQ7ikOcK1IH9!rq8b-G6O*w&#YQ$eXNbt%uq!iaGT3zLD# ze3eYL?+(;oWsIkqdNGQeRn9Ka@TmxZ$@A0Aqinti*C`6NFHCJscaAXSE`m=n5d$u7 z2P(6*0|%SzTwkPxCxi^n2P{^>X#X z2!(;l!O{^89H2}`m9Uumvl@*Q^A;bthhp%v^NQbn#hc&hayDYU33~zx-Yr$Fl0TRg z9kdM!t-F{=E^0DAu!L%98~HvGu4fVq;c9vnASs`nx;6{mGWt^yxcq^@y_IJVy?qxVQl$dB^H_&I?#bYMW5kkeS|Y)S6^FAGio42f7D;Y za}grWG92zfHRo$KOAU(WYv4eN#ZCddVHXoMi-{)iOZ^{f4p zJ4yCUs2ith*b?QD?fhf*FBS`|VuKO+a{ylRMK{ax9}vw(=;KUPm!jk7I;I3xm}yq;-f%_Q(}$h^#z*h z@P0GDH4^P!#5l9+RVHd#++58xKc-Q3C}uUb6tj407YL^#e!)_Vs1ofTB$d1b5b&PE zhbeys23u44=9M>d?K%sleHHQrSE2O%V(yVsNb~HxZB<|nyy9O%a+k(OdA-Mym5%2D z@$A219pWdZFJ&63(4TZVdJdt~p#slVp-RG!M8~|BPv+}Q+-oj0L5}Sw-lm||ioAF6 zVQWm;>BW0+qxl%(h>VZ=CBMF>2fPnwxW2g4(k-h$I=-Vs#1y}O6k5m#mAbu|eKeeI zoGzS=kp=yd=&~?o5Pi%^KaN*B`#AB~@mfu$e909duIX~Kh`ZuA1nC*G-cPyAddl(b zoo3rvw!Uh4McO#pBc4Z`rni(Jlm5_v{-clmlY7og5p}l1#{4Kve~7Qe`*7cth^fwt z21BQ=;o3=|$Kh<--GlW)S6jO?J3nKVv0nyfn)7Gtd`nO+ctO82U&o`ySU>;hxAo=9 zJg2@T>%#YfJ9*)x4*PKuH59e!L*U~ev*pBBoG{YVZwI0E8se{;o(2-`5}Q}4a*N9P zIK1M58Wfyg;1}Q#xi|tHLGV;K)i!sM1F3KaQ9GUuTo!*G*kM)&Kc|UiQA+7X3OZ#=tGIABOoQ zpC6WCtTlwe{~LQ}71ZY2c6+=OiaP{%mtw)%;!cs^9-z2;phb$iJ1wpOf`f14sfh_K%*eG~rgK4ODHtKcUt4kGj=wdd; zxjLEHXXmC=Fg$W-D{<9GHFMw5U{$#3v<8g6=bG>1lpH%4F_3JhS(?3dv*vQ&>mpfo zJkRHsm{&8t9GM99D8g_IA|Ie8oVTs)N+R?=mp(j%ZH}W#e$&AiyA>Q*7)U%X5I>+P z^@pwV|6${&L-doR&&3htc2pHzO$V7MezsTMeId}=JYG@i4kqZkK!<$%Gw&r+Viq4Y z?VB6N5%1x2NefNf6BIu@tUx}K;x4z3JRgDrwA@Trl3T^>@P_lE!hY!@XhMS^H1^+e zcuKDWKemVZ_9Jh{09m{|p7UKknv@X>D@^1M23zwJgW z&3xz{KtOnM@z5%C>SrGVe;mA=4r4a2-qs?ZZ>!-y)&ueWL2^9=efne=9^(NZSMK6F z;-B?S}K=deQqo88Z+FlB;$@` za$l=ztX#J@J?DplYP%mR%6LEg{D0dqW@Se7BHEe8MLl9Z?Rz3r+I^``5RAdB1 zC;8!2&OLtQtcy&B^|IcK5F|v@HiL}v_>F(1uYA3fdQzocu8n{~YeGSe`VEmt@-qSI zJA0hT>HY{VJZ{6iZ$ow<5k>L=H-mIMy3=&83@?dHDvO+p{5pU1`G@pF<00ywFHDy3 z*!EmVo05PgpO_g$`tygbxSf6}s|_|JS?NuQhb!aDeKgRe-9)t^<)LQ8N!Y1%f+y%| zn*S1uBuY0mg?1Ae;BqCHrmg9qFceTr!dWxoUydip&jhTdH|njVN=og>zZlA4 zumUWJ1Y-jbShqqr!XSsR=x5VtTC>MX@SrdzeE&DD6r_Q`C z9dvZd(LGnM{pB^-*8sh7S60;#Gmec0JKVl+uxGDhtG5jFB(KYD8e8`%oc4Ku1G1%# ztAS%2py`VAtE4PU`jx(e$6JB#D({FSj4S-O);`r~Y4Is&5P><85+>;kjc15~k`*_V zDI*8EqConoSsixVnF2ulH$(ziy{m8b?_}7$iyDh!@0lJudzu;}kugH#PlJ`y0*hy< zwIGr4uhHrUiX{%A0q{z=d#(7&Tj6_MmR_P*$Duk>3Pr1ujP3l#MG3xjv7(M$tKbqeEtHVH z_rX!4v|$@S%AvkfabbD-k$cg==s7t zqp3ZYcUZIKn+^t6^3PoeEt{BdR=t7a{g5O6UNoS_DMu24dKLW(z5jEBte?}y?7@z1 z1hhXc-bJG;KF#H(pK(I0u`RRlb@1D`63m@DI2BZWUDZkG?rY1 zY@0BpUcdNipxo|eipo$??jcK#29J~p>&rzVAC2MR3z#hVR@nKHQUf+K$05a##`bQm zHnD&?c8MF`emsU({vGK@X;&@G>)L9?X5oH@?_^~)Y)@dk7VV5~UL6j`2FVdMG2HJ} zRZ3l1P1Ygm^bk5V%DX`t_1RDSN+RP5j@9hgIV>R*L1rO1$rRbAPo^q&95?;1fGHst zqCpN3apG3Vj97k?7WbBHj-Hqtvjyr9)96B}md<)2!1|_%ul0Y8uM1Z6-j8HT3<$Y^nI{j*XLvw61QC^mE#aXQF>LPcqeau zZFA@d+pjscK;R_j1;p#lA`NIeE8@S1SJDQ!3uJHNsH- zPdyXJfoS(K4AoZH2Bq*PSC_>WLh2i+DYD)Hy^l1nnwRQ$o!mCbMhmR+e$XDfacD

3fNN(I!%o6!(io%Ea>{!`= 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 z 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%0A9b24siOI!3$VDy&gqgCsc!e{XLM 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

CT{pxmNUcw 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

BW9zrHP>w3I!v}o((L?t| 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�XmH0BX8{7Fo+5_+B0y51fCh=1gyC_ zeXDGwYgHUUY2B>`nY(|p5Lr|Z&k_gB0`RKZrt{$GR&#&7HlmXJ?(=0}j3Id2pjK2ft}>dMx~ z>W}yai=Pg_+G}HdKJktlogUT;b`9NQHB(S=c{-V^8R5$P9T&rtl`H&B``6^XQ~+9o z*$Aq6f3+s)1p}wf)Z5fwY}Oae&vPGjtWy_F^v=FNf9a^;9`)KG63`7#io^EVU%0AU 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π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¨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

Tr`~umt5;lf?z^s5VIro`H-P%l~ge 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 ZAOB9FaQ^)_;C1{vo%?^F!*c$G{}-XHNrC_X literal 0 HcmV?d00001 diff --git a/luci-theme-argon/Screenshots/screenshot_phone.jpg b/luci-theme-argon/Screenshots/screenshot_phone.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8237a0368813d8d7b9c9db585e088db8c999ed06 GIT binary patch literal 467306 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�+7nJaJ7mB9sLzVyJJZ=+*$74h7n0@`hdg#0= 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

lOFHKxW{3#(Fx9m%qBfZq)kvVO1c3-Pc^W;%aRL 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ą{I-$r5S?^x&B#zV;2P|Gz!u1LuTx!S~J}&)jB>NS< zfqehbpwO7>Br3ob&;Szz*OtpD?&Jsdl}ypxV$P*E-8dyV$sATxghdIRJXjJnPSR8W zBDBdFcEL%k1R*xeq{uOSeHmza2CnK#7@6SNEv(p25ugI4W9lA#G& z2~-1h>OH0?$rr-uRTAnlY8va@*-j7R5rkf;fn@D~@V|Vx?@34N=|DozTEMy5LP+oj zzt_J9xBl5f|2oM2`)I5`Gy4CEr$u`jo+d;iDHnV9e_a!XGeu0ywURq63z`C9{H?!l z`iNWX;A?1qUCTx;Ecz%a5HS4O$J}Rpv3lO3A8S?<+&vFIT#`8>r4ak|XrP&bhdEu$ zm*oU%GmC*I^yLa}Z9=A~wAN4Y29Z$xD>nd~c7PqD+2X~O9T?-D;L0DePVdkt57r2Zni-xP@zu&}FannX zDRIEa&aDo~L-7)67xMtM0CQ1psK(yv8ESEjES#)<$>&+ATH+;F|H+f~>Q$9jF;=mo zR=VcySjU8fr+xf@?y&mup8QY!=^Eyfl5)qHK#$ov0i&d*j78}Ac+6xbc7;%fk`7^a zvWWOe)dTppfA7I)f%q5nQx|-H6`iwu0ZKg6MYK)aZ1_objDenKoC?#I7@lrc3D9-P9;oWC`I@-m;fk2Z(?I_TY~{PKz@Wv}U{M5*fJ*i*SE*lvt-lj6LYc1n0%kb0`R{HLl zrO-vqKNoFZxXg46)BsCln~Yf+I75zICeYQoJci4L-qaQ3+?+}DxmrOQGNJYGiq2#Q zc6QrO!+DFWEZ_aAg(T3i*z&D@Z^;@bpa5V@U@$`7gO5PjVP?l;XZS#I2^ZPGa2~)W z2Jxqn2me0C-$SFHHqY?b+sRX*!PVzmaMXWixLPjyDymzQI!QFPi#^l5= zY$9?c%wT8Wk!q_f&JU{5$qDsPEYcI=jp04(rUT9L;(lH0z|QGFAhZB_cG<>+>4p-b+Eferq$4n&u1f8|^fo

e=0A{NF6?{A{eK2DqLO8zpRY_f2dNrv^u$-7JGQb$5F}b$~0)b`_fJ z@;@%$=I!`7&U3{xd`h??>t_FMbxf3ax|aAirSy04=D|C>`uxQ2hpBC3b-k}hF%=Qt zmT!M2`gLte^t1ER+aaF9p%QjA({NM4yxnEO96Z}a-NV%*Dab49 zPU!_(dJm;d!VE$w_>oQmWXBN7F5$zN~Sg~FnMst*h52k zK|MkSLF6r6RiRm|zmf8kO3evaovOtyf+RNcJ352dO3`8aA|2nesIo;~q1gRgdp>-h z@Z<)d9x}&2xj@Sybh3?u)&gl%rCG|k)vIXcLN$JMy ziXALmEd2xK^{;7v$_1_~3B#xpUvNvxP z>lHMkeGwY4CoZZmZaG~47^CUvJiG#4{go<_TUa%=g4rALt*9-cROgk!=COZ@3_M$l zgkAH!i1ofh26`#++k=UR60JRK3NH#asDMfew?-Yc@C*Qufl-ODk^Oziq;T!dk97hD zX}f!I#bB(U`Y1r^V%hQ5)4z}CzvSDlel~%fwmGgWeZq%_IYwsFeMi2=A+7-;a7-BktC|1`?uA)yy z@PQG{vze|)66KxTj9WD~Jk|{#8BUSN8t-U&*R#0U|(VDuJ1U4Z(g5uLX?b5)Z7L`ExVQtd%Pib}g zKIT439ODsA**y1MBFAn4Czm1xwlAb=hqtl%oBUa6+Als#4Q1)4(Oi)@(2?e9=R> z(H6hVPG4q6tsG|Xim7XupgwCc)e5S&*y{Db6EBp5cZQE^`kWIX3VQUPyTU`Nhsz} zW2ZOBd0dc=&`jqs=ax&f$ul)dPe|C0>=0-G3cE*fK153(^jTPnNAB^3UHE93c)I09 z3z@1}Q|VINanT*|)+<@b`gN_G?P3jQk0rmd{g~$tB+Z#rX0s*a#Kb9VyOkWIm6w_i z{XWL)oN+Sh2SJkU8sa|z=*@*`Sn8ifMy{!`uqGxu8A+aso-2t9_Bb=8U>~t@{h4v# znhUE@X$U=kZbT6<;_d%N*784o{IzS3{(boAf1Pl^^5KJ)mL-QdBo*y+u1T62I8o5> z-q%V?c;5)9D|0IA+z!NSM6E}iJ#$rZW^WRwv2K=$n(;mx%sl10rx1o{JP>kPo`A`0 zb*l+e0qNk}o5T35bK0Zg_N;S}1DJi?y(dqbIsv1F4w1(ds~dR}I*Q_ahrZot70hct?(?gBg zOf3S?JnF}t{C!wnbHq+q+`4C!x6+QEFt^A9%S|2R98gU^v_q>#7ruMU(uvT}efq5% z)nz-jtj0#47WsZe2;GTm+FibT)aSdFUl9=WMNzgDjc{>Z=iAG0*41!t5*obQd8Dr? zwp)@m7(l@vZxwJOwxM{g;WPlKFjx{N9dbKA`h;ywG1tqK>OHW;QiPP8a(IgMIDK|-^*i)`!%y-D zZva|#Ng?3m!QJle)0<=;g&|MR-X^!3A`Gdqc(~!>x=AHo)$b-;8~JmJkYh_UNd3-txUJ^ zeOULrZy#Xy1A*}R`RwpMa^$#Wn|Idup6FoV*-!PeZlTmJ&b1Hs-~3Gr{!RP?Ak@s1 zOeXI1{4%TX+NLCJFsV++XV)K?K%(I{s3>BmW%PpuS$6v?(x*fpo4J*>}o3?LW!^_U&buK1eF>{tQTaU<88{dxF*iAboL#JN<|115~1;h1J&RD*V zVLQYf)nbU)00hC_q-0~Ja0B1sGrSG+if3iLCacl-m@nqQUPdO(=`!f~#Oo^n&i~nX z{oh9a4^c8=TsmxO>)K*-!hKnmB=DXlA6^k$QvM~i+5~UhXUFloSlcilSRvsUaBZEg zg+=8e{f!rNE`cpbhd;VULq(IwSK`p-!dG7s3|i_>na^q)Ue9>Lu#0Dq5S z-2h+zcP~I*+lC`&=$DucsQT)_*B}b_+rED1e&X<%Nc=~;;QdcbWk-U66-H!P)to^{ zW3q9nzy8eae;-(X^=kiFgz)?C%o40=2aHq8bR#lg6G2B|yY{QB>9aon@R^Jn$HKDW zD2U^tL_oq)vS3NKpiB$juWMz4VEHPoYIvNv_7iG;ZvpYD${us~^zBJU{z2;L&JKx5 zKZQLbUrmF~qr*08nBnL|nH_vO%A#%B+A7wW7Pm;Ec2vb1uVo57!1V>=mv^FqEFDOf zizh|p#RlXAN{nk{Z4zv2E~#w#1hW_B4rMT zi|R8WFC-Lcu|XXw3B!|)?(X5Bl!2<>4i?G?pqL5Pa+dt!1;PWHyi&MX@k&@;dZRfrm zK|kN0cpW_rF9q(bmQdbJ)Epr4VeWCLE{)*guLmouhN;C5FNGGXI;>=|_9)~%s%YVK z&iy1Ts}S%oHi{bc)ws|Z2nLI;je^0)llcNr0#H9aGAcTs;@RB^TeMGn<-Lshe9AGS z+m6|{qS@C;J3BWT*YNq4{Vtm|#N+FE-nA4i{x)}UGnl8_TwKnkP<{pglPVqGO5%HI zaI)gL`~hLqsb!wO_bc9iw#3EWOBio%prN%Ly_ueO6;zQN0(e*fS~-*L;_EM@@Eb>y z(u%&dx*jJ-{_BxB@5@~xORx?ZcGf)D;5!pwO(bzawO$+vu$qrp0wNA!t11v4eS!xF zKm2NQg$QlY`l)tO?hqX61N@<&VdU}SJdcBe6FU}gF5bT1-U;SRtwD$+s2D2PcQoWmHK@8D_F3+*J{o*k$Ych(Fqympm*B_t14v-G13h{5 z*0~+U6gcRh;9QH#g3R7|*o>yIzThqhBS6`uv?aN}_Q;ghB&ymX>jW+gswNDD>uob~ z2k#?ihCu!a%<;FTe%fTzY3LD~(*vn$SJ~6|4M!ri0Ig4KZ2TtjQ7-z1frcGHTkTzm zOelSSX2U?|Tdrtww-~CdV#`z!D`{Es((kI7)VI21-iDvresP>G?3X}XAI*DN5~h-0 zT<^90dRa6=nK&8E!~T-qpBounTvk*r_)T;EtL4{=T%&x@xO;)(Ao1EqtJo43i|W{2 zsMsT!mOv9S+*{@Y#kZ;-(MD7i-Y;VK2rpa$Z|9h$?I@XP0&|xgeVOQ1Nt);QTG~lN ziDFVa&gm=b0p~eA@lnrGg27U&PKeqTGmB+2g6WwO00*|JGBh;js4J$C) zrW~lya2b~#2hBAGnNv#PDqV{qaUyY=ta9x`c zz2Q9Rb;_M6dqUjq2+8(Nt8QMPmb!?``hMiaQ-LcT2ON&X{Z6$z^<2b@Xwd)6Zmc<`v zV_t4xot8pMN9XQynuAEY7o)W^SkcwB@d3Vv9v$U9apHezxhs%{k^q{)WeP}LR|R)% z(*};Y5AQh^>%v>7A%kwNdSH5x>WW<|u5yp)n8VUyf{u>-z=q)~m`bHP#$o^9zH3D? zViX=|a#vx6E{-cxu%B~g=YCQzkl}zf^yzvao$diSIc=!H#)7P!j^swcPOL3^9CGwevspJ6R<3^Mr79;^!5H= z^5sXm9In&f0spU6yHK+@kVe!vY>nFlsJjGIZogR!>c%^n30IrE5W#!XL}58S9_Go1 zCvH7VeZ`AhzhWaqE02AwJp&K^tQ;pJ{JQqha`{Dl;K_PR&y@0KrhzyA=)C_Ztmo&) zENfK;o z*Dr6s`RfAzKHtXG3*EW)KLSg)9D4a`eYOO7}mvw#W^@g5xW721K_6P)IE?H z@ecbrn?a#g-J^bDC7A+JlSw>+2MR%X4@!)L_STi_7R#r%F}ZGLf&y(G&;sMt)L}uE zShLB1JCQL0mt6-eqf@Az*@mL@SZS2g0E=iLq$JdB9;%_lS!l-`LOy{ms^*EI>08vwC;bS(f67;-h?Q9QeEla_JA%<9;HyTS1Dh!*^Z>Wd~YL8T=jgQGltwBx`$&;Qq9cQ(E%IW+H2o|PsoI@RFECxH^@oA`~-IZy=YzH0A z)n#We4_Wym8*@ShUrj3qPF6(DM|FvxEykw|3!9dh*70~ZBrX-Jq0M}68G8HF7-ls2 z0lBLTA?}Wio6+5ok%`bK_R(~jBQoo)CZe99wd&v=%=9IzI+%CJj*%ywrJ9=IsG+ zEh>A`PCD4kRU>Hsr=$vaz&A~MLb$?;vEo6qf#mJMrmzUT}GMqyD zD}@WeA(mUef4V#~TL=ac7P)eim!lhyO(N)iF&xf%Y6&Djg#!}A&9RWR4-Wcy&2$FO zBkq-}#7#iZUv~oJsK&@Q4$~amhBo#$h7l$lTj5i&iuF2QI#I)qI33D!3H4LXQvRzF z-lBZ?IFA&=;s(iS7SQ|n?1x(_UF+2BLA1B?naQm9-o_m9dLpd`sK)gct*DI1`9?ma z5r}6@Yh?WGz7)INSzlpNZ+ag3V}xFo=LHpS2(j$G>ba#A*P6B~OTgwuW| zuXJ=%@QGF(ozIn_X|;^f@1<))5sdc@7hU?_9ZRQl0@#y-6xit~oHvRmQ}9ObcYj@D z19yn!08mYwSZI3_pFqZ97o(v^VrE_=fjfsf-c>P}s>W#wOHC|HJ(b%9V=*JNht5`} zu*jG7d^n5&MFVs{nMI%$adfJ7!v zQVp3(aFn~gtL8Up=Sy|jKcLYY&9X^Ef+Rj|M=F24aQ-3vZ@@O+$8(Bbzf>3riLJf) z?0UDOFqWfI=Ei@l-Xt)?Url1$t1WW-f)^dyL~f%Ywt{ z6UEK`JYhcPkFg4jgZW-Uxwv+7LEfo&M(%20d7hSlWf?U!o53f@QpwldUhv}?cW0wr zo6or;wwmuXYs^z&IhwL4G<)OdA{rZ3`aZ^IHWHRSAFxmrq1ees{S?T{-E3oQCreea z^EMQ_^?MQH`6mY;qlo5^w)mK>2&yPbP@lw6q-N^H!{cEvgAzkCQA=bv>siIAJe_gSxynLz8-sBQ2 z>xZlQ)4`0$SDNX!#@2`RMee7xepoVM*I%hlgg8r&(T~|KEooI^c_XVTA0z(J(f=r1 zFP1Gk$6xP~L>_BeT#+r{@pZX*C6ByynuftYfSoo3Sw?)bnrT}k;TtCzTxfH zuP!2>=@+iE1>1eWpx3n>KnO2htfX2Qo~2wPH582z6Ekd-e)dvh<`d$3^so&_(XQ zS_`_N1HD_6attJq+KYiQU@fZhxSBQmMugY;ch?A9Pixiw=nwiJotV}?DS2$7!y_G1#Q%eRa8qcGQVR$j+LX(iH9V%ALN;%f{W^rT6`t!X~HOrH9h1_s~ECG>XxEZHr9GscH`(`~T(7b;$=9|&&cyr?)?85{R6&WlB0 zolRod#>Aq_bbG!FO;(bDxrWfw@?Nv4-B z)gl!L$;Z4kE^*OdeijKQ2=u=8tzBJR{1P@y$facK%9x3XI##AHd6{&TOAqkOU`DEB zic=ey4BHR1zf@H!WYl+>^44dqk090MF_DGC*y+%5w+zZpvGOX(b z6up4tW=0fU3{@Svl-hS8Lm?F=HPfdoc0L@e0st9}bLqWugm^AUq@!^GW;aBQ79@EyGaJo(N5c|H1QNH?-=ynO7lE41P4b@!x^?HqT z2XM~w5BqKf(?$C|S2;-#weADn9`^6i7s^wk4cuF&&YRVu)2K-r?hTx#{_5&dkh1MM z3cuy(wc6BX$yORK<1!lrACT|C3u#%!4`pd*W0*-~Y|#+uh+dH*C{8)Og7N8K!ZE4K z>fA=mW`3NkO3lkEU+9j4#Q^`#Ji@c}_}Reg)~%sU>i+YyfHu7{58S~q_g$iZ6B;k& zfL_E4_DbGEmWdxyChjrLV~q8BQC+v9juLpl{mm4zI1ZCfj^yozZ5RoG0>UOqHd0VgmC~W+ zzpfd8VG+qsPlj7`T1uM#M6Q@4dM6GIav9I8)?ba6Y<_a{t za#dz_Hn5#mVKbf6j(K3+U(U-DERNQK+XQCbYvxt8`(OvNZQ( za6A!5nEt)#Y3dhC$77gDaz~v5x`($Pt*UQ>`0U`|JZhkXxQ&2RKVDR#GZ&kGUt3g82k7rHpW`G$<0M)IMxIgObK8iZ4i^_(VO zR>q`I83y{fm!uHcbYe-#%P3MyeRcAX=rAr!s8fcgBoPpm$sAlR-%n z_%Us#8e!!CnP6ipKlOy}s9VVhtlXO^dsTL>b+HL{u5r+$be*g8itOvo_6Y`wXd$fA z59x*k1#mrj$k4i^IXYijyc5W`UOeSEIs$Vk*X1@nHc~T0QBOJGFz6Bm0i_oO1f(|!y(&nNE`;8cme7$-=!zgEROuzC z)X*XHB1#Pq2)*}S0!Z)p#kJ4AYpv7nKKq{YJm2$uH-97}BXcI1V~#n-nD6^5eOE?` zSM8od7mC-t75V;u39Vev5Q?l`Wpx7_a>@`k2=1n85U-+TVi0tc7(QOR zs$2q7cr6W94V+_>+l}8NXuY#=oiZ9=hxId5sdX!`T4Lp+9A3iXp)>-hv(4E^UHC?}$Zv!J zCw4){%?S-vLRHgI$*`!>TT$}^=wN7(5JtXv$67gOdi-s`bY&jVT@&G@rk&Iyq4rNl zad|cg-j&D@8%=vDpkxOOQPJ1q(JKTj9NXeV@bl{kX%N6+&U!xG7Vpca#g%=|`I{c< z+s^V##8Od_ctn(mN+h_mw99UydY)>0<@v(OOp4+lH@b87^vOicz?yw$5WST&D1qiU zKy;DyweZPC?c?XI0+U4!T=4vZZ8nNDs!BjMu9ss}GV7qU;RysHI zA|t)|Nd~#sruOQPe?JUl|oSs{Q= z?hr~#9{{Ss*FvI-I)T4YX|{rQY?Wvds`%@^Q#G~z#Lp-@rze`F9W`+7nkS7p%yf=l2U4htWimL`GD?#(zGCSgww3W9 z+hBNOy;*lY<^Af`md2$1Wtnh5rq14FGJnj=rt@EJasTe)e?!#t=N4eDT5!0Y$WL-H zKS0Oey}nVMrj@Ax2ilQ`#o1KZO0K&b>Zm{Hq;(L^Q;iQhJnOe)7UJi8*zxi}oys^V z=Hv7;fKew&Io16V){+bCaKLA`xdA<2k*nP)OoZzex5TVGFX-3?*w^uv#8m3UyToX! zWs?UjC~>$7QR`C}m(-c)^dEUQ9t{@6>W;Zf7#EbRyELZwiHxlA3d9!-ZYjrs_CXJ> z08<(MU+WwQzizc-UNys|p0yFaYA-ww%ro$Fd$2}U+SBn4PRO1f&Eh5zw@?72ywp=M zK?o0L(<=liSI0OkkYEATp<$1elt?V);+UA2c4Vzx4+-3+qloIi2&8$_;u;#^a*bk+0S9_hYK;P6rE)#o46yq_yn=?odA^TLKy6k2En zgi@hl>?qVe<3$AU_`v{)Py+~NndGJ84{kjiVO)OU7dn0ScIu#41(R=c*?cWV|-y`bV}2j8p#ajRp0oGg!j2c}vZ@ z3(GRi%VkQ&c#`O2m13!(Bdp>v8(GFsKLJE!X;n4e_qyWom0sVN;v^{w@)dVtGcYA;91XAjE7nNq_{&$g`oCSlh1S8!;OL_J1UE6v_q3? zbLh;rvz{$ELx??_YfWFxZA*z3FG199;`uAZBst&*aRdl4i>zO1dOD(+i9aY%U${jxv<^zgy; zA{|G9g2d1#up-@+Z&^e4_hbCG;|?6K+DrmWQVt-*bA(`$aP?p+e87f1tx8XWcDwy) zo}8R&uO^H-7qb6g@69?-&P=BD(#VC^yxNSl!MT9(eI8@0k{MpD;!`)yZFOzx{x4I0 zI++w+p+oS(=drE*1Yf?(CH72C7IHVPMD*h>!0DnoUe`H=na>!0posXg$5VZ7PYU+>Rhy$uuAd$?`A$Un*Wi}_zU-mE zE_+C<{Ryj1jOZf+P7|x|tNwW$d8z&NHVRV-@rZ1^eDvfs4P7oocM9`8{naWqB?=2s zOcY-@NNT@Vxr1{R{HOf_{&B&ye`TK&=_|u`Oy_dUSeS+n;nZ4fcKIUacp-MoGwZ8`e6=Y z0+*PxWj^PxJJ())$*Jz^Pk-I|fXwumV<~KZZ)s&+&qPoaOx=>?T}uV0)~1%ab8xy{4YPriugR95hQU-hZ0AS)=W+qEm; z*hHZ-C(WZm7xRqLJdckZo|w^>Gi*iF3q17V&W&8}GbFD-_C!csqfVCjzNEj|FODLK zW{T_tNTugwim=h|RjEk~z15`i@$eDxXsMlvob}@_C6p-aM1UDBjih9Y&}jkuYY3=`?JRSqvSebXD%#Q4!ap>0zRfv-HWcf& z9&e)dpwT5A7-qwaJRqq<52tfYnC^7QPc8D}O{-gQWf40r9tlj!3IUs_sXUCCxugAk z4pxz8!9u_WQH!|GcDyF-4e?iuxU&1FJpl~a23SB+TTj$|L;co71e5V_T7RJ&aZlrs#g@V#BU zYh$thZDJ=8$e&HDd$)Bi#X;O2O?7fg~@j>K)o zDcIQLSHy4S#U6#S2u?vVPZXXB%fdxB-Nl0ygXY8S^B7b>mbS7waazg%WYxa<>~mb% zU$G2>^x5bgOGe3`IJvY_v$*Hq-R@rIQ)yUGZsbf4O#O4Zn9r>;FSxR(u4{MqAkXKn zDCPz`2c_R-oMEX~XyR0OTc>o?*Gy)zhY#Zew=_2eyZ9=!nA_k(pcj#G@yNeBcSMIpE7azx~H=yG^3 zQ{--8BJtaks<1a^vz!wmXJgjKiP4qft;17h8&;Y*g9Vj$-wKfN7PJM~JkEL26FSOL z%u@CfM-X^uaQH!cZg8tQr=i}i+AfR2mUm3iPf}vCR$fXBigJ@Hn#=26V3S9G$qa5H zxp2CX@8up$oe?tlByp)}D?y1mn5ox2yv?X2RzA04grh-yp;WB3#Us(yGlVtng|m45 z1gx~;obz0A%H-|lktd%{R*5@Z36sqVU5Q-^>^!;e_=M1%-$awY^=Wg}C~su)n&!X( z#dgHC;A53s#geJb2JZ~joEJ^m28Wx4?wl((x=M9s9Ma6?yQk#Z)?VgDsmlGpTXNv& z4fx_=Qs!_hgWwt%(WxELd&uU^nhF-1O%>Cjdw}3iKbSABA1P+#7LQ0UW{tEk-V+2C z7*(ZmOloN7qZi?(I)#x_OPyPJBN;_rIU0@Ra;V2e@bFJr@QyuUM2s<~1m&2~Ft953 zs%|QA7c?_Vo!d4*K9Z9P^0_dWD+x^rw=O9@&GHry(@^W2Vc;ZrxCeaa$}uvoO-o4! zbfmQ+ooe1nzz7DJ)j3T+arEvr|Is>GC4Et3%175qUyk278x+T}?));YQnX=wbY@_@ zE)U_-JCop}W11VGV-lLC$E(x4;EV!_E`+Z1x4p6FJ^Bc1AIwVFT4QkCd~EqW*<iMG;y?PD z;i-~}Ext~FRRfY)kgCm_Y$;-UCCzD-ft;2Ux)-s;mU{h3wC+_b9iwqts?g9L3caib zx>8NK=^-=$mKru>>^7t$kemw6Wo3Qbn(VENwZqD(PV%6qS;&nMEfqdSl;v^}^}~y0 zK~aU_#iSxHS{wQC*9kNtjJjDQYsuB(4IYm!Wxw-VGkFz{2`DFSzn~hnb-$o&*FBEP zh0m50h%AP)y6RBEGZA5^wjI=)HVYCG8WhUhn6fci!n8gMaMI~09}8~fPg!YC*`|G^ zBw#CXW3)Ygrbf88k#oo=3Qe6;M^ zJdV3z#=e%+-ONDT|JKcJgyd+4F6&X7wLly{4T9oy3xwi7PJ-ks!yW{he*%y_F0RPrFuMgGwrNHl z5)APD-nO}GVrV)bmHu7qKge>z@OYW#nn~P_Jtjm;udPz* z$mw)un;1=0)+rQgE3mk^XvZPAk(zZHK+*TC3W|-&$)O8`YW(aJm8j_W4wP$%h>dKe zGyUKqRcLR8RGVL^S$N^vrj-nAKdmaFJaGm+GgEbijXekUv zHHJCxoMpNxSm!-t4tuYR6$9kHN^2{g3eDtfXyiD`Ql^A}3_!x>Oro;&?BQ8}600hZ z@yhJsca9no8k0$-M3by-ssaKnQ8~z3n@Q}iMcfyxOK+cP5j4rQp1+1(JmUzh zQ?U*P@=H>u*gm!c$F%8)S@00ZR&P%vS)9vL=sp!!WPKfkd8AAZ6 zjCZ@B8-n$gU$~EVcRg>?WO7oRa#w^jc@4TwS}|50*9u66zzUMX&?-(U^G%)?Dr|ql z$25P$dlD(MJMcHc@E^VI@1_3@>Xue@(C8kt`WSNN5!jzoX@rcvG~UO}Gsz6&d-jYL zbE)Kg17{4psM3EQui+`FX<(qx#A)2&Z@4Aswxmywh&=osH{s&gA@*3-@7(-<>rUs& zmS`TW!{2V|BCHT*U<4C0leAw7$oSdgi8e?Q@8yM$EAC-Uk{Av`tm&yd^Jyy6!7v~1yVLj4NaVl)SWYnA;K zkKuPmqyfterE42bWfAcP5%mQQvuQpT-t8WY*Fo#)yN#Z88ybeEMztyjrH2mM$K4(sN!1qTb7egnuP9RjRzUm69_fUS zFy&c;O_0Hbnl=7<&(-#b6oQT0LgbnSPJ`xa^5Ok5|p$p;PU03-(k`2L`08ZK8PZ z+B^yvE)+ZsuhN@K^s$LWV0IXi>~iZ0A_k6yGzI7zc{cWI5irO>(4#+fc06zo;$uWz zEe@WdP12Fg?Ji>Qt`Y9!*mJI)2hNZlbEnB5+zb4`Klb>?1&97M(Q7X=tZ*LlAO~Fc z#6SS!pBXL(p`2NwP%yVZX6YTfZoNs^FzmqE0r*z$c?Jt=wlaKKo?MX5Azh|7SX;P` z`Y{m>GIOD)KA5{$;OW{YvRv4Mne0W4Nr4P&?Q4-2iW_%&MbiaH1iA`?Ct#=wv@=wo z0jNQ2oHPAI#MX}uvBbL&CNCDk#^3v6X57!yjt?ausQUb2zv#kB67S-%YsC5*;m&Yi zRlLu>G*82Ygz)`|9?|$N=5fVwW@>)U_)qBMy1=$VT6F_T1MvJTN8N&VB&x)LUJf>w z%NSxF#c}Z4iEnhcdd*Y5YOM+t&DWMurU>}q(%GZ{fNAsvP;Pf+;x zgHTZ9DYStxnK`wJ2qXudJ9fAg{ytGY=E=FTU?N&&Xk3^%9+JQ!vxQY?$pvusPdK}R z8xMBxx1kh;_3&cLA|T!n%I}fq^6g)cP1vOC6Q@C;+H@rJ^zvaAKfk1z{H%XYiL3@Q zcWu)vZ7Z#geSqd#C+64{CujZ~a}mNXB(S94&+5v7pw34n{P0M;wgr?8Ky

52_`cE(zZMEpNgo`EY*4G)I09>a1 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 ?@Ps4J#L1b@yTXJK07_F;-CIu>*o89f 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.pure-menu-children,.pure-menu-allow-hover:hover>.pure-menu-children{display:block;position:absolute}.pure-menu-has-children>.pure-menu-link:after{padding-left:.5em;content:"\25B8";font-size:small}.pure-menu-horizontal .pure-menu-has-children>.pure-menu-link:after{content:"\25BE"}.pure-menu-scrollable{overflow-y:scroll;overflow-x:hidden}.pure-menu-scrollable .pure-menu-list{display:block}.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list{display:inline-block}.pure-menu-horizontal.pure-menu-scrollable{white-space:nowrap;overflow-y:hidden;overflow-x:auto;padding:.5em 0}.pure-menu-horizontal .pure-menu-children .pure-menu-separator,.pure-menu-separator{background-color:#ccc;height:1px;margin:.3em 0}.pure-menu-horizontal .pure-menu-separator{width:1px;height:1.3em;margin:0 .3em}.pure-menu-horizontal .pure-menu-children .pure-menu-separator{display:block;width:auto}.pure-menu-heading{text-transform:uppercase;color:#565d64}.pure-menu-link{color:#777}.pure-menu-children{background-color:#fff}.pure-menu-disabled,.pure-menu-heading,.pure-menu-link{padding:.5em 1em}.pure-menu-disabled{opacity:.5}.pure-menu-disabled .pure-menu-link:hover{background-color:transparent}.pure-menu-active>.pure-menu-link,.pure-menu-link:focus,.pure-menu-link:hover{background-color:#eee}.pure-menu-selected>.pure-menu-link,.pure-menu-selected>.pure-menu-link:visited{color:#000}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0}@font-face{font-family:'Google Sans';src:url('data:application/font-woff2;charset=utf-8;base64,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') format('woff2'),url('data:application/font-woff;charset=utf-8;base64,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') format('woff');font-weight:normal;font-style:normal}@font-face{font-family:'TypoGraphica';src:url('../fonts/TypoGraphica.eot?#iefix') format('embedded-opentype'),url('../fonts/TypoGraphica.woff') format('woff'),url('../fonts/TypoGraphica.ttf') format('truetype'),url('../fonts/TypoGraphica.svg#TypoGraphica') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'argon';src:url('../fonts/argon.eot?u6kthm');src:url('../fonts/argon.eot?u6kthm#iefix') format('embedded-opentype'),url('../fonts/argon.ttf?u6kthm') format('truetype'),url('../fonts/argon.woff?u6kthm') format('woff'),url('../fonts/argon.svg?u6kthm#argon') format('svg');font-weight:normal;font-style:normal;font-display:block}[class^="icon-"],[class*=" icon-"]{font-family:'argon' !important;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-expand_more:before{content:"\e20b"}.icon-menu:before{content:"\e20e"}.icon-favorite:before{content:"\e291"}.icon-spinner:before{content:"\e603"}.icon-delete:before{content:"\e900"}.icon-edit:before{content:"\e901"}.icon-use:before{content:"\e902"}.icon-loading:before{content:"\e903"}.icon-switch:before{content:"\e904"}.icon-error:before{content:"\e905"}.icon-dashboard:before{content:"\e906"}.icon-logout:before{content:"\e907"}.icon-Network:before{content:"\e908"}.icon-services:before{content:"\e909"}.icon-system:before{content:"\e90a"}.icon-vpn:before{content:"\e90b"}.icon-storage:before{content:"\e90c"}.icon-statistics:before{content:"\e90d"}.icon-hello-world:before{content:"\e90e"}.icon-angle-right:before{content:"\e90f"}.icon-password:before{content:"\e910"}.icon-user:before{content:"\e971"}.icon-question:before{content:"\f059"}.icon-docker:before{content:"\e911"}.icon-control:before{content:"\e912"}.icon-statistics1:before{content:"\e913"}.icon-asterisk:before{content:"\e914"}.icon-app:before{content:"\e915"}:root{--primary:#5e72e4;--dark-primary:#483d8b;--main-color:#09c;--header-bg:#09c;--header-color:#fff;--bar-bg:#5e72e4;--menu-bg-color:#fff;--menu-color:#5f6368;--menu-color-hover:#202124;--main-menu-color:#202124;--submenu-bg-hover:#d4d4d4;--submenu-bg-hover-active:#09c;--blue:#5e72e4;--indigo:#5603ad;--purple:#8965e0;--pink:#f3a4b5;--red:#f5365c;--orange:#fb6340;--yellow:#ffd600;--green:#2dce89;--teal:#11cdef;--cyan:#2bffc6;--gray:#8898aa;--gray-dark:#32325d;--light:#ced4da;--lighter:#e9ecef;--secondary:#f7fafc;--success:#2dce89;--info:#11cdef;--warning:#fb6340;--danger:#f5365c;--light:#adb5bd;--dark:#212529;--default:#172b4d;--white:#fff;--neutral:#fff;--darker:black;--background-color:#f4f5f7;--login-form-bg-color:rgba(244,245,247,0.8);--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--blur-radius:10px;--blur-opacity:.5;--blur-radius-dark:10px;--blur-opacity-dark:.5;--font-family-sans-serif:"Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB";--font-family-monospace:SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;--font-family-normal:Open Sans, PingFangSC-Regular, Microsoft Yahei, WenQuanYi Micro Hei, "Helvetica Neue", Helvetica, Hiragino Sans GB, sans-serif}html,body{margin:0px;padding:0px;height:100%;font-size:16px;font-family:"Google Sans","Microsoft Yahei","WenQuanYi Micro Hei","sans-serif","Helvetica Neue","Helvetica","Hiragino Sans GB";font-family:var(--font-family-sans-serif)}html{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{font-size:.875rem;background-color:#f4f5f7;background-color:var(--background-color);color:#32325d;color:var(--gray-dark);-webkit-tap-highlight-color:transparent}*{margin:0;padding:0;box-sizing:border-box}::selection{background-color:#5e72e4;background-color:var(--primary);color:#ffffff;color:var(--white)}a:link,a:visited,a:active{color:#5e72e4;color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}li{list-style-type:none}.table{position:relative;display:table}.tr{display:table-row}.thead{display:table-header-group}.tbody{display:table-row-group}.tfoot{display:table-footer-group}.td,.th{line-height:normal;display:table-cell;padding:.5em;text-align:center;vertical-align:middle}.th{font-weight:bold;white-space:nowrap}.tr.placeholder{height:4em}.tr.placeholder>.td{line-height:3;position:absolute;right:0;bottom:0;left:0;padding:.4rem 0 !important;text-align:center !important;background:inherit}.td[width="33%"]{padding:1.1em 1.5rem}.table[width="33%"],.th[width="33%"],.td[width="33%"]{width:33%}.table[width="100%"],.th[width="100%"],.td[width="100%"]{width:100%}.col-1{flex:1 1 30px !important}.col-2{flex:2 2 60px !important}.col-3{flex:3 3 90px !important}.col-4{flex:4 4 120px !important}.col-5{flex:5 5 150px !important}.col-6{flex:6 6 180px !important}.col-7{flex:7 7 210px !important}.col-8{flex:8 8 240px !important}.col-9{flex:9 9 270px !important}.col-10{flex:10 10 300px !important}*{box-sizing:border-box;margin:0;padding:0}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:normal;line-height:1.1 !important;color:inherit}select{padding:.36rem .8rem;color:#555;border:thin solid #ccc;background-color:#fff;background-image:none}.btn,button,select,input,.cbi-dropdown{line-height:1.5rem;padding:.5rem .75rem;margin:.25rem .1rem;color:#8898aa;border:1px solid #dee2e6;border-radius:.25rem;outline:0;background-image:none;box-shadow:none;transition:box-shadow .15s ease}select,.cbi-dropdown{width:inherit;cursor:default}select:not([multiple="multiple"]):focus,input:not(.cbi-button):focus,.cbi-dropdown:focus{border-color:#5e72e4;border-color:var(--primary);box-shadow:0 3px 9px rgba(50,50,9,0),3px 4px 8px rgba(94,114,228,0.1)}.cbi-dropdown,select[multiple="multiple"]{height:auto}pre{overflow:auto}code{font-size:1rem;font-size-adjust:.35;padding:1px 3px;color:#101010;border-radius:2px;background:#ddd}abbr{cursor:help;text-decoration:underline;color:#5e72e4;color:var(--primary)}hr{margin:1rem 0;opacity:.1;border-color:#eee}.login-page{height:100%}.login-page .video{position:absolute;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:#000;background-color:var(--darker);overflow:hidden}.login-page .video video{width:100%;height:auto}.login-page .volume-control{position:fixed;right:1rem;top:1rem;width:1.5rem;height:1.5rem;z-index:5000;cursor:pointer;background-size:contain;background-image:url(../img/volume_high.svg)}.login-page .volume-control.mute{background-image:url(../img/volume_off.svg)}.login-page .main-bg{position:absolute;width:100%;height:100%;left:0;top:0;background-image:url(../img/blank.png);background-repeat:no-repeat;background-position:center;background-size:cover;transition:all .5s}.login-page .login-container{height:100%;margin-left:4.5rem;position:absolute;top:0px;display:flex;flex-direction:column;-webkit-box-pack:center;justify-content:center;align-items:flex-start;min-height:100%;z-index:2;width:420px;box-shadow:rgba(0,0,0,0.75) 0 0 35px -5px;margin-left:5%;background:transparent}.login-page .login-container .login-form{display:flex;flex-direction:column;-webkit-box-align:center;align-items:center;position:absolute;top:0px;width:100%;min-height:100%;max-width:420px;background-color:#fff;background-color:var(--white);-webkit-backdrop-filter:blur(var(--blur-radius));backdrop-filter:blur(var(--blur-radius));background-color:rgba(244, 245, 247, var(--blur-opacity))}.login-page .login-container .login-form .brand{display:flex;-webkit-box-align:center;align-items:center;margin:50px auto 100px 50px;color:#525461;color:var(--default)}.login-page .login-container .login-form .brand .icon{width:50px;height:auto;margin-right:25px}.login-page .login-container .login-form .brand .brand-text{font-size:1.25rem;font-weight:700;font-family:"TypoGraphica"}.login-page .login-container .login-form .brand:hover{text-decoration:none}.login-page .login-container .login-form .form-login{width:100%;padding:20px 50px;box-sizing:border-box}.login-page .login-container .login-form .form-login .errorbox{text-align:center;color:#fb6340;color:var(--warning);padding-bottom:2rem}.login-page .login-container .login-form .form-login .input-group{margin-bottom:1.25rem;position:relative}.login-page .login-container .login-form .form-login .input-group::before{font-family:'argon' !important;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#525461;color:var(--default);font-size:1.5rem;position:absolute;z-index:100;left:10px;top:10px}.login-page .login-container .login-form .form-login .input-group .border{position:absolute;width:100%;height:1px;bottom:0;border-bottom:1px #5e72e4 solid;border-bottom:1px var(--primary) solid;transform:scaleX(0);transition:transform .3s}.login-page .login-container .login-form .form-login .input-group input{font-size:1rem;line-height:1.5em;display:block;width:100%;padding:.5rem .75rem .5rem 3rem;margin:.825rem 0;box-sizing:border-box;transition:all .3s cubic-bezier(.68, -0.55, .265, 1.55);color:#525461;color:var(--default);border:0;border-radius:0;border-bottom:1px solid #fff;border-bottom:1px solid var(--white);background-color:transparent;background-clip:padding-box;box-shadow:0 3px 2px rgba(233,236,239,0.05);outline:none}.login-page .login-container .login-form .form-login .input-group input:focus+.border{transform:scaleX(1)}.login-page .login-container .login-form .form-login .input-group .cbi-input-password{margin-bottom:2rem;position:relative}.login-page .login-container .login-form .form-login .user-icon::before{content:"\e971"}.login-page .login-container .login-form .form-login .pass-icon::before{content:"\e910"}.login-page .login-container .login-form .cbi-button-apply{width:100% !important;box-shadow:rgba(0,0,0,0.1) 0 0 50px 0;font-weight:600;font-size:15px;color:#fff;color:var(--white);text-align:center;width:100%;cursor:pointer;min-height:50px;background-color:#5e72e4 !important;background-color:var(--primary) !important;border-radius:6px;outline:none;border-width:initial;border-style:none;border-color:initial;border-image:initial;padding:10px 0px;margin:30px 0px 100px;transition:all .3s !important;letter-spacing:.8rem}.login-page .login-container .login-form .cbi-button-apply:hover,.login-page .login-container .login-form .cbi-button-apply :focus{opacity:.9}.login-page .login-container footer{box-sizing:border-box;width:100%;text-align:center;line-height:1.6rem;display:flex;justify-content:space-evenly;margin-top:auto;padding:0px 0px 30px;z-index:10;color:#525461;color:var(--default);position:absolute;bottom:0}.login-page .login-container footer .ftc{position:absolute;bottom:30px;width:100%}.login-page .login-container footer .luci-link{display:block}header,.main{width:100%}footer{font-size:.8rem;overflow:hidden;padding:1rem;text-align:right;white-space:nowrap;color:#aaa}footer>a{text-decoration:none;color:#aaa}small{font-size:90%;line-height:1.42857143;white-space:normal}.main{position:relative;top:0;bottom:0;overflow-y:auto;height:100%}.main-left{top:0;float:left;width:15%;width:calc(0% + 15rem);height:100%;background-color:#fff;background-color:var(--menu-bg-color);box-shadow:rgba(0,0,0,0.75) 0 0 15px -5px;overflow-x:auto;position:fixed;z-index:100}.main-left .sidenav-header{padding:1.5rem .5rem;text-align:center}.main-left .sidenav-header .brand{font-size:1.8rem;color:#5e72e4;color:var(--primary);font-family:"TypoGraphica";text-decoration:none;text-align:center;cursor:default;vertical-align:text-bottom}.main-left::-webkit-scrollbar{width:5px;height:1px}.main-left::-webkit-scrollbar-thumb{background-color:#f6f9fc}.main-left::-webkit-scrollbar-track{background-color:#fff}.main-right{float:right;width:85%;width:calc(100% - 15rem);height:100%;transition:all .2s}.main-right>#maincontent{position:relative;z-index:50}.pull-right{float:right}.pull-left{float:left}.nowrap:not(.td){white-space:nowrap}[disabled="disabled"]{pointer-events:none}header{color:#fff;color:var(--header-color);padding:0;position:relative}header.bg-primary{background-color:#5e72e4 !important;background-color:var(--primary) !important}header::after{content:"";position:absolute;height:2rem;width:100%;background-color:#5e72e4 !important;background-color:var(--primary) !important}header .fill{padding:.8rem 0;border-bottom:0 solid rgba(255,255,255,0.08) !important;display:flex}header .fill .container{height:2rem;padding:0 1.25rem;display:flex;align-items:center;width:100%}header .fill .container .flex1{flex:1}header .fill .container .flex1 .showSide{display:none;color:#fff;font-size:1.4rem}header .fill .container .flex1 .showSide:hover{text-decoration:none}header .fill .container .flex1 .brand{font-size:1.5rem;color:#fff;font-family:"TypoGraphica";text-decoration:none;padding-left:1rem;cursor:default;vertical-align:text-bottom;display:none}header .fill .container .pull-right{float:right;margin-top:0rem;display:flex}header .fill .status span{display:inline-block;font-size:.8rem;font-weight:bold;padding:.3rem .8rem;white-space:nowrap;text-decoration:none;text-transform:uppercase;text-shadow:none;border-radius:4px;cursor:pointer;transition:all .3s;box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 2px 0 rgba(0,0,0,0.12);margin:0 .25rem}header .fill .status span:last-child{margin-right:0}header .fill .status span[data-indicator="poll-status"]{color:#32325d;background-color:#fff}header .fill .status span[data-style="active"]{background-color:var(--green)}header .fill .status span[data-style="inactive"]{color:#ffffff !important;background-color:#32325d}#xhr_poll_status{display:flex;margin-left:.5rem}#xhr_poll_status *{color:#fff}div[style="width:100%;height:300px;border:1px solid #000;background:#fff"]{border:0 !important}.danger{background-color:#ff7d60 !important}.warning{background-color:#f0e68c !important}.success{background-color:#5cb85c !important}.notice{background-color:#11cdef !important;color:#fff}.error{color:#f00}.alert,.alert-message{font-weight:bold;margin-bottom:1.25rem;padding:1rem 1.25rem;border:0;border-radius:.375rem !important;background-color:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 2px 0 rgba(0,0,0,0.12);text-shadow:1px 1px rgba(0,0,0,0.1)}.alert.error,.alert-message.error{background-color:#ffd600}.alert h4,.alert-message h4{padding:.25rem 0;border-radius:4px;background-color:#ffd600}.alert .btn,.alert-message .btn{height:auto}.alert-message>h4{font-size:110%;font-weight:bold}.alert-message>*{margin:.5rem 0}.alert-message .btn{padding:.3rem .6rem}.container .alert,.container .alert-message{margin-top:0rem}.main .main-left{transition:all .2s}.main .main-left .nav{margin-top:.5rem}.main .main-left .nav>li>a:first-child{display:block;margin:.1rem .5rem .1rem .5rem;padding:.675rem 0 .675rem 2.5rem;border-radius:.375rem;text-decoration:none;cursor:default;font-size:1rem;transition:all .2s;position:relative}.main .main-left .nav>li>a:first-child.active{color:#fff;background:#5e72e4;background:var(--primary)}.main .main-left .nav>li>a:first-child.active::before{color:#fff !important}.main .main-left .nav>li>a:first-child.active::after{transform:rotate(90deg);color:#fff !important}.main .main-left .nav>li>a:first-child:hover{cursor:pointer;color:#fff;background:#5e72e4;background:var(--primary)}.main .main-left .nav>li>a:first-child:hover::before{color:#fff !important}.main .main-left .nav>li>a:first-child::before{font-family:'argon' !important;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;left:.8rem;padding-top:3px;transition:all .3s;content:"\e915";color:#5e72e4;color:var(--primary)}.main .main-left .nav li{padding:.5rem 1rem;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:0}.main .main-left .nav li a{display:block;color:#5f6368;color:var(--menu-color)}.main .main-left .nav li.slide{padding:0}.main .main-left .nav li.slide ul{display:none;overflow:hidden}.main .main-left .nav li.slide:hover{background:none}.main .main-left .nav li.slide .slide-menu{margin:0 .5rem 0 2.5rem;padding:0 .5rem}.main .main-left .nav li.slide .slide-menu.active{display:block}.main .main-left .nav li.slide .slide-menu li{position:relative;border-radius:.375rem;margin:0;padding:.5rem 0;background:none;list-style:none}.main .main-left .nav li.slide .slide-menu li a{text-decoration:none}.main .main-left .nav li.slide .slide-menu li::after{content:"";position:absolute;left:0;bottom:0;width:0;height:2px;background-color:#5e72e4;background-color:var(--primary);transition:all .2s}.main .main-left .nav li.slide .slide-menu li:hover{background:none}.main .main-left .nav li.slide .slide-menu li:hover::after{width:100%}.main .main-left .nav li.slide .slide-menu .active{background:none;color:var(--menu-color)}.main .main-left .nav li.slide .slide-menu .active a{color:var(--menu-color)}.main .main-left .nav li.slide .slide-menu .active::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#5e72e4;background-color:var(--primary);transition:all .2s}.main .main-left .nav li.slide .slide-menu .active:hover{background:none}.main .main-left .nav li.slide .slide-menu .active:hover::after{width:100%}.main .main-left .nav li .menu{display:block;margin:.1rem .5rem .1rem .5rem;padding:.675rem 0 .675rem 2.5rem;border-radius:.375rem;text-decoration:none;cursor:default;font-size:1rem;transition:all .2s;position:relative}.main .main-left .nav li .menu.active{color:#fff;background:#5e72e4;background:var(--primary)}.main .main-left .nav li .menu.active::before{color:#fff !important}.main .main-left .nav li .menu.active::after{transform:rotate(90deg);color:#fff !important}.main .main-left .nav li .menu:hover{cursor:pointer;color:#fff;background:#5e72e4;background:var(--primary)}.main .main-left .nav li .menu:hover::before{color:#fff !important}.main .main-left .nav li .menu::before{font-family:'argon' !important;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;left:.8rem;padding-top:3px;transition:all .3s;content:"\e915";color:#5e72e4;color:var(--primary)}.main .main-left .nav li .menu::after{position:absolute;right:.5rem;top:.8rem;font-family:'argon' !important;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-moz-osx-font-smoothing:grayscale;content:'\e90f';transition:all .15s ease;color:#ced4da;text-rendering:auto;-webkit-font-smoothing:antialiased;transition:all .3s}.main .main-left .nav li .menu[data-title=Status]:before{content:"\e906";color:#5e72e4;color:var(--primary)}.main .main-left .nav li .menu[data-title=System]:before{content:"\e90a";color:#fb6340}.main .main-left .nav li .menu[data-title=Services]:before{content:"\e909";color:#11cdef}.main .main-left .nav li .menu[data-title=NAS]:before{content:"\e90c";color:#f3a4b5}.main .main-left .nav li .menu[data-title=VPN]:before{content:"\e90b";color:#8965e0}.main .main-left .nav li .menu[data-title=Network]:before{content:"\e908";color:#8965e0}.main .main-left .nav li .menu[data-title=Bandwidth_Monitor]:before{content:"\e90d";color:#2dce89}.main .main-left .nav li .menu[data-title=Docker]:before{content:"\e911";color:#6699ff}.main .main-left .nav li .menu[data-title=Statistics]:before{content:"\e913";color:#8965e0}.main .main-left .nav li .menu[data-title=Control]:before{content:"\e912";color:#5e72e4;color:var(--primary)}.main .main-left .nav li .menu[data-title=Asterisk]:before{content:"\e914";color:#fb6340}.main .main-left .nav li a[data-title=Logout]:before{content:"\e907";color:#adb5bd}.lg{margin:0;padding:0 !important}.logout{display:block;margin:.8rem .5rem .1rem .5rem;padding:.675rem 0 .675rem 2.5rem;border-radius:.375rem;text-decoration:none;font-size:1rem;transition:all .2s;position:relative}.logout:before{font-family:'argon' !important;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;left:.8rem;padding-top:3px;transition:all .3s;content:"\e907";color:#32325d !important}body[class*="node-"]>.main>.main-left>.nav>.slide>.menu::before{transition:transform .1s ease-in-out}body[class*="node-"]>.main>.main-left>.nav>.slide>.menu.active::before{transition:transform .2s ease-in-out}.main>.main-left[style*="overflow: hidden"]>.nav>.slide>.menu::before{display:none}#maincontent>.container{margin:0 1.25rem 1rem 1.25rem}ul{line-height:normal}li{list-style-type:none}h1{font-size:2rem;padding-bottom:10px;border-bottom:thin solid #eee}h2{margin:0 0 1rem 0;font-size:1.25rem;letter-spacing:.1rem;padding:1rem 1.25rem;color:#32325d;border-radius:.375rem;background:#fff;box-shadow:0 4px 8px rgba(0,0,0,0.03);font-weight:bold}h3{font-size:1.1rem;line-height:1;display:block;width:100%;margin:0;margin-bottom:0;padding:.8755rem 1.25rem;color:#32325d;color:var(--gray-dark);border-radius:.375rem;background:#fff;font-weight:bold}h4{margin:0;padding:.75rem 1.25rem;font-size:.7rem;font-weight:600;color:#525f7f;background-color:#e9ecef;background-color:var(--lighter);font-weight:bold}h4 em{padding:0 .5rem}h5{font-size:1rem;margin:2rem 0 0 0;padding-bottom:10px}.cbi-section,.cbi-section-error,#iptables,.Firewall form,#cbi-network>.cbi-section-node,#cbi-wireless>.cbi-section-node,#cbi-wireless>#wifi_assoclist_table,[data-tab-title],[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear),[data-page="admin-system-opkg"] #maincontent>.container{font-family:inherit;font-weight:normal;font-style:normal;line-height:normal;min-width:inherit;margin:1.25rem 0;padding:0rem;border:0;border-radius:.375rem;background-color:#fff;box-shadow:0 0 1rem 0 rgba(136,152,170,0.15)}.cbi-modal .cbi-section,.cbi-section .cbi-section{padding:0;box-shadow:none}.cbi-modal .cbi-tabmenu{margin-left:0}.cbi-map-descr{font-size:small;line-height:1.5;padding:0 1.25rem}.cbi-section-descr:not(:empty){font-size:small;line-height:1.5;padding:1rem 1.25rem 0 1.25rem}.cbi-map-descr+fieldset{margin-top:1rem}.cbi-map-descr>abbr{cursor:help;text-decoration:underline}.cbi-section>legend{display:none !important}fieldset>fieldset,.cbi-section>.cbi-section{margin:0;padding:0;border:0;box-shadow:none}.cbi-section>h3:first-child,.panel-title{font-size:1.1rem;line-height:1;display:block;width:100%;margin:0;margin-bottom:0;padding:.8755rem 1.25rem;color:#32325d;color:var(--gray-dark)}.cbi-section>h3:first-child,.cbi-section>h4:first-child,.cbi-section>p:first-child,[data-tab-title]>h3:first-child,[data-tab-title]>h4:first-child,[data-tab-title]>p:first-child{padding:1rem 1.25rem}.cbi-section p{padding:1rem}.cbi-tblsection{overflow-x:scroll}table{border-spacing:0;border-collapse:collapse}table,.table{overflow-y:hidden;width:100%;font-size:90%}.table .table-titles th{background-color:#e9ecef;background-color:var(--lighter)}table>tbody>tr>td,table>tbody>tr>th,table>tfoot>tr>td,table>tfoot>tr>th,table>thead>tr>td,table>thead>tr>th,.table>.tbody>.tr>.td,.table>.tbody>.tr>.th,.table>.tfoot>.tr>.td,.table>.tfoot>.tr>.th,.table>.thead>.tr>.td,.table>.thead>.tr>.th,.table>.tr>.td.cbi-value-field,.table>.tr>.th.cbi-section-table-cell{padding:.5rem}.container>.cbi-section:first-of-type>.table[width="100%"]>.tr>.td{padding:.6rem}.cbi-section-table-cell{line-height:1.1;align-self:flex-end;flex:1 1 auto}tr>td,tr>th,.tr>.td,.tr>.th,.cbi-section-table-row::before,#cbi-wireless>#wifi_assoclist_table>.tr:nth-child(2){border-top:thin solid #ddd;padding:1.1em 1.25rem}#cbi-wireless .td,#cbi-network .tr:first-child>.td,.table[width="100%"]>.tr:first-child>.td,[data-page="admin-network-diagnostics"] .tr>.td,.tr.table-titles>.th,.tr.cbi-section-table-titles>.th{border-top:0 !important;background-color:#f6f9fc;padding:1.1em 1.25rem;line-height:1.3rem}.table[width="100%"]>.tr:first-child>.td{margin:auto 0}.cbi-section-table-row{margin-bottom:1rem;text-align:center !important;background:#f4f4f4}.cbi-section-table-row:last-child{margin-bottom:0}.cbi-section-table-row>.cbi-value-field .cbi-dropdown,.cbi-section-table-row>.cbi-value-field .cbi-input-select,.cbi-section-table-row>.cbi-value-field .cbi-input-text,.cbi-section-table-row>.cbi-value-field .cbi-input-password{width:100%}.cbi-section-table-row>.cbi-value-field .cbi-input-text,.cbi-section-table-row>.cbi-value-field .cbi-input-password{min-width:80px}.cbi-section-table-row>.cbi-value-field [data-dynlist]>input,.cbi-section-table-row>.cbi-value-field input.cbi-input-password{width:calc(100% - 1.5rem)}.cbi-section-table-row .td{text-align:center !important}.control-group{display:inline-flex;width:100%;flex-wrap:wrap;gap:2px}div>table>tbody>tr:nth-of-type(2n),div>.table>.tr:nth-of-type(2n){background-color:#f9f9f9}table table,.table .table,.cbi-value-field table,.cbi-value-field .table,td>table>tbody>tr>td,.td>.table>.tbody>.tr>.td,.cbi-value-field>table>tbody>tr>td,.cbi-value-field>.table>.tbody>.tr>.td{border:0}.btn,.cbi-button,.item::after{font-size:.8rem;display:inline-block;width:auto !important;padding:.45rem .8rem;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:all .2s ease-in-out;text-align:center;vertical-align:middle;white-space:nowrap;text-decoration:none;text-transform:uppercase;color:rgba(0,0,0,0.87);border:0;border-radius:.2rem;background-color:#f0f0f0;background-image:none;-webkit-appearance:none;-ms-touch-action:manipulation;touch-action:manipulation}.cbi-button-up,.cbi-button-down{font-size:1.2rem;display:inline-block;min-width:0;padding:.2rem 1rem;font-size:0;color:transparent !important;background:url(../icon/arrow.svg) no-repeat center;background-size:12px 20px}.cbi-button-up{transform:scaleY(-1)}.cbi-button:not(select){-webkit-appearance:none !important}.btn:hover,.btn:focus,.btn:active,.cbi-button:hover,.cbi-button:focus,.cbi-button:active,.item:hover::after,.item:focus::after,.item:active::after,.cbi-page-actions .cbi-button-apply+.cbi-button-save:hover,.cbi-page-actions .cbi-button-apply+.cbi-button-save:focus,.cbi-page-actions .cbi-button-apply+.cbi-button-save:active{text-decoration:none;outline:0}.btn:hover,.btn:focus,.cbi-button:hover,.cbi-button:focus,.item:hover::after,.item:focus::after{box-shadow:0 0 2px rgba(0,0,0,0.12),0 2px 2px rgba(0,0,0,0.2)}.btn:active,.cbi-button:active,.item:active::after{box-shadow:0 10px 20px rgba(0,0,0,0.19),0 6px 6px rgba(0,0,0,0.23)}.cbi-button-up:hover,.cbi-button-up:focus{box-shadow:0 0 2px rgba(0,0,0,0.12),0 -2px 2px rgba(0,0,0,0.2)}.cbi-button-up:active{box-shadow:0 -10px 20px rgba(0,0,0,0.19),0 -6px 6px rgba(0,0,0,0.23)}.btn:disabled,.cbi-button:disabled{cursor:not-allowed;pointer-events:none;opacity:.5;box-shadow:none}.alert-message [class="btn"],.modal div[class="btn"],.cbi-button-find,.cbi-button-link,.cbi-button-up,.cbi-button-down,.cbi-button-neutral,.cbi-button[name="zero"],.cbi-button[name="restart"],.cbi-button[onclick="hide_empty(this)"]{font-weight:bold;color:#fff;border:thin solid #8898aa;background-color:#8898aa}.btn.primary,.cbi-page-actions .cbi-button-save,.cbi-page-actions .cbi-button-apply+.cbi-button-save,.cbi-button-add,.cbi-button-save,.cbi-button-positive,.cbi-button-link,.cbi-button[value="Enable"],.cbi-button[value="Scan"],.cbi-button[value^="Back"],.cbi-button-neutral[onclick="handleConfig(event)"]{font-weight:normal;color:#fff !important;border:thin solid #5e72e4;border:thin solid var(--primary);background-color:#5e72e4;background-color:var(--primary)}.cbi-page-actions .cbi-button-apply,.cbi-section-actions .cbi-button-edit,.cbi-button-edit,.cbi-button-apply,.cbi-button-reload,.cbi-button-action,.cbi-button[value="Submit"],.cbi-button[value="Upload"],.cbi-button[value$="Apply"],.cbi-button[onclick="addKey(event)"]{font-weight:normal;color:#fff !important;border:thin solid #5e72e4;border:thin solid var(--primary);background-color:#5e72e4;background-color:var(--primary)}.btn.danger,.cbi-section-remove>.cbi-button,.cbi-button-remove,.cbi-button-reset,.cbi-button-negative,.cbi-button[value="Stop"],.cbi-button[value="Kill"],.cbi-button[onclick="reboot(this)"],.cbi-button-neutral[value="Restart"]{font-weight:normal;color:#fff;border:thin solid #f5365c;border:thin solid var(--red);background-color:#f5365c;background-color:var(--red)}.btn[value="Dismiss"],.cbi-button[value="Terminate"],.cbi-button[value="Reset"],.cbi-button[value="Disabled"],.cbi-button[onclick^="iface_reconnect"],.cbi-button[onclick="handleReset(event)"],.cbi-button-neutral[value="Disable"]{font-weight:normal;color:#fff;border:thin solid #eea236;background-color:#f0ad4e}.cbi-button-success,.cbi-button-download,.cbi-button[name="backup"],.cbi-button[value="Download"],.cbi-button[value="Save mtdblock"]{font-weight:normal;color:#fff;border:thin solid #4cae4c;background-color:#5cb85c}.cbi-page-actions .cbi-button-link:first-child{float:left}.a-to-btn{text-decoration:none}.cbi-value-field .cbi-button-add{font-weight:bold;margin:4px 0 4px 3px;padding:1px 6px;display:flex;align-items:center}.tabs{margin:0 0 1rem 0;padding:0 1rem;background-color:#FFFFFF;border-radius:.375rem;box-shadow:0 4px 8px rgba(0,0,0,0.03);white-space:nowrap;overflow-x:auto}.tabs::-webkit-scrollbar{width:1px;height:5px}.tabs::-webkit-scrollbar-thumb{background-color:#f6f9fc}.tabs::-webkit-scrollbar-track{background-color:#fff}.tabs li[class~="active"],.tabs li:hover{cursor:pointer;border-bottom:.18751rem solid #5e72e4;border-bottom:.18751rem solid var(--primary);color:#5e72e4;color:var(--primary);background-color:#dce1fe;margin-bottom:0;border-radius:0}.tabs li[class~="active"] a,.tabs li:hover a{color:#5e72e4;color:var(--primary)}.tabs li{font-size:.875rem;display:inline-block;padding:.875rem 0;border-bottom:.18751rem solid rgba(0,0,0,0);margin:0;transition:all .2s}.tabs li a{text-decoration:none;color:#404040;padding:.5rem .8rem}.tabs li:hover{border-bottom:.18751rem solid #5e72e4;border-bottom:.18751rem solid var(--primary)}.cbi-tabmenu{color:white;padding:.5rem 1rem 0 1rem;white-space:nowrap;overflow-x:auto}.cbi-tabmenu::-webkit-scrollbar{width:1px;height:5px}.cbi-tabmenu::-webkit-scrollbar-thumb{background-color:#f6f9fc}.cbi-tabmenu::-webkit-scrollbar-track{background-color:#fff}.cbi-tabmenu li{background:#dce3e9;display:inline-block;font-size:.875rem;border-top-left-radius:.25rem;border-top-right-radius:.25rem;padding:.5rem 0;border-bottom:.18751rem solid rgba(0,0,0,0);margin:0 .2rem}.cbi-tabmenu li a{text-decoration:none;color:#404040;padding:.5rem .8rem}.cbi-tabmenu li:hover{cursor:pointer;border-bottom:.18751rem solid #5e72e4;border-bottom:.18751rem solid var(--primary);color:#5e72e4;color:var(--primary);background-color:#dce1fe;margin-bottom:0}.cbi-tabmenu li:hover a{color:#525f7f}.cbi-tabmenu li[class~="cbi-tab"]{border-bottom:.18751rem solid #5e72e4;border-bottom:.18751rem solid var(--primary);color:#5e72e4;color:var(--primary);background-color:#dce1fe;margin-bottom:0}.cbi-tabmenu li[class~="cbi-tab"] a{color:#5e72e4;color:var(--primary)}.cbi-tab-descr{padding:.5rem 1.5rem}.cbi-section-node{padding:1rem 0}.cbi-section .cbi-section-remove:nth-of-type(2n),.container>.cbi-section .cbi-section-node:nth-of-type(2n){background-color:#f9f9f9}[data-tab-title]{overflow:hidden;height:0;opacity:0;margin:0;padding:0rem 0rem !important}[data-tab-title] p{margin-left:1rem;margin-bottom:1rem}[data-tab-active="true"]{overflow:visible;height:auto;opacity:1;transition:opacity .25s ease-in;margin:inherit !important}.cbi-section[id] .cbi-section-remove:nth-of-type(4n+3),.cbi-section[id] .cbi-section-node:nth-of-type(4n+4){background-color:#f9f9f9}.cbi-section-node-tabbed{margin-top:0;padding:0;border:0 solid #d4d4d4;border-radius:.375rem}.cbi-tabcontainer>.cbi-value:nth-of-type(2n){background-color:#f9f9f9}.cbi-value-field,.cbi-value-description{line-height:1.25;display:table-cell}.cbi-value-field abbr,.cbi-value-description abbr{color:#32325d;color:var(--gray-dark)}.cbi-value-description{font-size:small;padding:.5rem;opacity:.5}.cbi-value-title{display:table-cell;float:left;width:23rem;padding-top:.25rem;padding-right:2rem;text-align:right;word-wrap:break-word}.cbi-value{display:inline-block;width:100%;padding:.35rem 1rem .2rem 1rem;line-height:2.4rem}.cbi-value ul{line-height:1.25}.cbi-value-field .cbi-dropdown,.cbi-value-field .cbi-input-select,.cbi-value input[type="text"],.cbi-value input[type="password"]{min-width:18rem}.cbi-value input[type="password"]{border-bottom-right-radius:0;border-top-right-radius:0;margin-right:0}.cbi-value input[type="password"]+.cbi-button-neutral{height:42px;border-bottom-left-radius:0;border-top-left-radius:0;margin-left:0;border:0}#cbi-firewall-zone .cbi-input-select,#cbi-network-switch_vlan .cbi-input-select{min-width:11rem}#cbi-network-switch_vlan .cbi-input-text{max-width:3rem}.cbi-input-invalid{color:#f5365c;border-bottom-color:#f5365c}.cbi-section-error{font-weight:bold;line-height:1.42857143;margin:18px;padding:6px;border:thin solid #f5365c;border-radius:3px;background-color:#fce6e6}.cbi-section-error ul{margin:0 0 0 20px}.cbi-section-error ul li{font-weight:bold;color:#f5365c}.td[data-title]::before{font-weight:bold;display:none;padding:.25rem 0;content:attr(data-title) ":\20";text-align:left;white-space:nowrap}.tr.placeholder .td[data-title]::before{display:none}.tr[data-title]::before,.tr.cbi-section-table-titles.named::before{font-weight:bold;display:table-cell;align-self:center;flex:1 1 5%;padding:.25rem;content:attr(data-title) "\20";text-align:center;vertical-align:middle;white-space:normal;word-wrap:break-word}.cbi-rowstyle-1{background-color:#f9f9f9}.cbi-rowstyle-2{background-color:#eee}.cbi-rowstyle-2 .cbi-button-up,.cbi-rowstyle-2 .cbi-button-down,body:not(.Interfaces) .cbi-rowstyle-2:first-child{background-color:#fff !important}.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell{width:auto !important}.td.cbi-section-actions{text-align:right !important;vertical-align:middle}.td.cbi-section-actions>*{display:inline-flex}.td.cbi-section-actions>*>*,.td.cbi-section-actions>*>form>*{margin:0 5px;display:flex;align-items:center}.td.cbi-section-actions>*>form{display:inline-flex;margin:0}.cbi-checkbox{margin:0 .25rem}.cbi-dynlist{line-height:1.3;flex-direction:column;min-height:30px;cursor:text}.cbi-dynlist>.item{position:relative;max-width:25rem;pointer-events:none;color:#8898aa;outline:0}.cbi-dynlist[name="sshkeys"]>.item{max-width:none}.cbi-dynlist>.item::after{position:absolute;width:2.2rem !important;height:calc(100% - .5rem - 2px);right:0;bottom:0;content:"\00D7";pointer-events:auto;background-color:var(--red);font-weight:normal;font-size:1.2rem;display:flex;align-items:center;justify-content:center;line-height:1.5rem;padding:0;margin:.25rem .1rem .25rem 0;color:#fff;border:1px solid #f5365c;border-radius:.25rem;outline:0;background-image:none;box-shadow:none;border-top-left-radius:0;border-bottom-left-radius:0}.cbi-dynlist>.item>span{white-space:normal;word-break:break-word;line-height:1.5rem;padding:.5rem .5rem;margin:.25rem .1rem;color:#8898aa;border:1px solid #dee2e6;border-radius:.25rem;outline:0;background-image:none;box-shadow:none;display:block;transition:box-shadow .15s ease;box-sizing:border-box;min-width:15rem}.cbi-dynlist>.add-item{display:inline-flex;align-items:center;width:100%;min-width:16rem}.cbi-dynlist>.add-item input{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:0;border-right:none}.cbi-dynlist>.add-item .cbi-button-add{font-weight:normal;font-size:1.2rem;display:flex;align-items:center;line-height:1.5rem;padding:.5rem .75rem;margin:.25rem .1rem .25rem 0;color:#fff;border:1px solid #5e72e4;border:1px solid var(--primary);border-radius:.25rem;outline:0;background-image:none;box-shadow:none;border-top-left-radius:0;border-bottom-left-radius:0}.cbi-dynlist>.add-item:not([ondrop])>input{overflow:hidden;width:100%;min-width:15rem;white-space:nowrap;text-overflow:ellipsis}.cbi-dynlist>.add-item[ondrop]>input{min-width:13rem}.cbi-dynlist,.cbi-dropdown{position:relative;display:inline-flex;padding:.2rem .2rem}.cbi-dropdown[placeholder*="select"]{max-width:25rem;height:auto;margin-top:-3px}.cbi-dropdown>ul{display:flex;overflow-x:hidden;overflow-y:auto;width:100%;margin:0 !important;padding:0;list-style:none;outline:0}.cbi-dropdown>ul.preview{display:none}.cbi-button-apply>ul.preview{display:none}.cbi-button-apply>ul.preview li{color:#fff}.cbi-button-apply>ul:first-child li{color:#fff}.cbi-dropdown>.open{flex-basis:15px}.cbi-dropdown>.open,.cbi-dropdown>.more{font-size:1rem;font-weight:900;line-height:2;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;justify-content:center;padding:0 .25em;cursor:default;text-align:center;outline:0}.cbi-dropdown>.more,.cbi-dropdown>ul>li[placeholder]{font-weight:bold;display:none;color:#777;text-shadow:1px 1px 0 #fff}.cbi-dropdown>ul>li{display:none;overflow:hidden;align-items:center;align-self:center;flex-grow:1;flex-shrink:1;min-height:20px;padding:.25em;white-space:nowrap;text-overflow:ellipsis}.cbi-dropdown>ul>li .hide-open{display:initial}.cbi-dropdown>ul>li .hide-close{display:none}.cbi-dropdown>ul>li[display]:not([display="0"]){border-left:thin solid #ccc}.cbi-dropdown[empty]>ul{max-width:1px}.cbi-dropdown>ul>li>form{display:none;margin:0;padding:0;pointer-events:none}.cbi-dropdown>ul>li img{margin-right:.25em;vertical-align:middle}.cbi-dropdown>ul>li>form>input[type="checkbox"]{height:auto;margin:0}.cbi-dropdown>ul>li input[type="text"]{height:20px}.cbi-dropdown[open]>ul.dropdown{position:absolute;z-index:1100;display:block;width:auto;min-width:100%;max-width:none;max-height:200px !important;border:0 solid #918e8c;background:#ffffff;box-shadow:0 0 4px #918e8c;border-bottom-left-radius:.35rem;border-bottom-right-radius:.35rem;color:var(--main-menu-color);margin-left:-0.2rem !important}.cbi-dropdown[open]>ul.dropdown li{color:#000}.cbi-dropdown>ul>li[display],.cbi-dropdown[open]>ul.preview,.cbi-dropdown[open]>ul.dropdown>li,.cbi-dropdown[multiple]>ul>li>label,.cbi-dropdown[multiple][open]>ul.dropdown>li,.cbi-dropdown[multiple][more]>.more,.cbi-dropdown[multiple][empty]>.more{display:flex;align-items:center;flex-grow:1}.cbi-dropdown[empty]>ul>li,.cbi-dropdown[optional][open]>ul.dropdown>li[placeholder],.cbi-dropdown[multiple][open]>ul.dropdown>li>form{display:block}.cbi-dropdown[open]>ul.dropdown>li .hide-open{display:none}.cbi-dropdown[open]>ul.dropdown>li .hide-close{display:initial}.cbi-dropdown[open]>ul.dropdown>li{border-bottom:thin solid #ccc;padding:.5rem .8rem}.cbi-dropdown[open]>ul.dropdown>li label{margin-left:.5rem}.cbi-dropdown[open]>ul.dropdown>li[selected]{background:#dce1fe}.cbi-dropdown[open]>ul.dropdown>li.focus{background:#dce1fe;outline:none}.cbi-dropdown[open]>ul.dropdown>li:last-child{margin-bottom:0;border-bottom:0}.cbi-dropdown[open]>ul.dropdown>li[unselectable]{opacity:.7}.cbi-dropdown[open]>ul.dropdown>li>input.create-item-input:first-child:last-child{width:100%}.cbi-dropdown[disabled]{pointer-events:none;opacity:.6}.cbi-dropdown .zonebadge{width:100%}.cbi-dropdown[open] .zonebadge{width:auto}.cbi-progressbar{position:relative;min-width:11rem;height:1.5rem;margin:0 0;border:thin solid #999;background:#eee;border-radius:4px;overflow:hidden}.cbi-progressbar>div{width:0;height:100%;transition:width .25s ease-in;background:#5bc0de;background:var(--bar-bg)}.cbi-progressbar::after{font-family:monospace;font-size:1em;font-weight:bold;font-size-adjust:.38;line-height:1.5rem;position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;content:attr(title);text-align:center;white-space:pre;text-overflow:ellipsis}#modal_overlay{position:fixed;z-index:900;top:0;right:10000px;bottom:0;left:-10000px;overflow-y:scroll;transition:opacity .125s ease-in;opacity:0;background:rgba(0,0,0,0.7);-webkit-overflow-scrolling:touch}.modal{display:flex;align-items:center;flex-wrap:wrap;width:90%;min-width:270px;max-width:600px;min-height:32px;margin:5em auto;padding:1em;border-radius:3px !important;background:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 2px 0 rgba(0,0,0,0.12)}.modal>*{line-height:normal;flex-basis:100%;margin-bottom:.5em;max-width:100%}.modal>pre,.modal>textarea{font-size:1rem;font-size-adjust:.35;overflow:auto;margin-bottom:.5em;padding:8.5px;cursor:auto;white-space:pre-wrap;color:#eee;outline:0;background-color:#101010;box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 2px 0 rgba(0,0,0,0.12)}.modal>h4{margin:.5em 0}.modal ul{margin-left:2.2em}.modal li{list-style-type:square;color:#808080}.modal p{word-break:break-word}.modal .label{font-size:.6rem;font-weight:normal;padding:.1rem .3rem;padding-bottom:0;cursor:default;border-radius:0}.modal .label.warning{background-color:#f0ad4e !important}.modal .btn{padding:.45rem .8rem}.modal.cbi-modal{max-width:90%;max-height:none}body.modal-overlay-active{overflow:hidden;height:100vh}body.modal-overlay-active #modal_overlay{right:0;left:0;opacity:1}.spinning{position:relative;padding-left:32px !important}.spinning::before{position:absolute;top:0;bottom:0;left:.2em;width:32px;content:"";background:url(/luci-static/resources/icons/loading.gif) no-repeat center;background-size:16px}.hidden{display:none}.left,.left::before{text-align:left !important}.right,.right::before{text-align:right !important}.center,.center::before{text-align:center !important}.top{align-self:flex-start !important;vertical-align:top !important}.bottom{align-self:flex-end !important;vertical-align:bottom !important}.inline{display:inline}.cbi-page-actions{padding-top:1rem;text-align:right;justify-content:flex-end}.cbi-page-actions>form[method="post"]{display:inline-block}.th[data-type="button"],.td[data-type="button"],.th[data-type="fvalue"],.td[data-type="fvalue"]{flex:1 1 2em;text-align:center}.ifacebadge{display:inline-flex;gap:.2rem;padding:.5rem .8rem;border-bottom:thin solid #ccc;background:#eee;box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);border-radius:4px}td>.ifacebadge,.td>.ifacebadge{font-size:.8rem;background-color:#f0f0f0}.ifacebadge>em,.ifacebadge>img{display:inline-block;align-self:flex-start}.ifacebadge>img+img{margin:0 .2rem 0 0}.network-status-table{display:flex;flex-wrap:wrap}.network-status-table .ifacebox{flex-grow:1;border-radius:4px;overflow:hidden;margin:0 1.25rem 1rem 1.25rem}.network-status-table .ifacebox-body{display:flex;flex-direction:column;height:100%;gap:.5em}.network-status-table .ifacebox-body>span{flex:10 10 auto;height:100%}.network-status-table .ifacebox-body>div{display:flex;flex-wrap:wrap;gap:.5rem}.network-status-table .ifacebox-body .ifacebadge{align-items:center;flex:1 1 auto;min-width:220px;padding:.5em;background-color:#fff}.network-status-table .ifacebox-body .ifacebadge>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cbi-input-textarea{font-family:monospace;width:100%;font-size:.875rem;min-height:14rem;padding:.8rem;color:#000}#syslog{font-size:small;line-height:1.25;overflow-y:hidden;width:100%;min-height:15rem;padding:1rem;resize:none;color:#242424;border:0;border-radius:.375rem;background-color:#ffffff;box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 2px 0 rgba(0,0,0,0.12)}#syslog:focus{outline:0}.uci-change-list{font-family:monospace}.uci-change-list ins,.uci-change-legend-label ins{display:block;padding:2px;text-decoration:none;border:thin solid #0f0;background-color:#cfc}.uci-change-list del,.uci-change-legend-label del{font-style:normal;display:block;padding:2px;text-decoration:none;border:thin solid #f00;background-color:#fcc}.uci-change-list var,.uci-change-legend-label var{font-style:normal;display:block;padding:2px;text-decoration:none;border:thin solid #ccc;background-color:#eee}.uci-change-list var ins,.uci-change-list var del{font-style:normal;padding:0;white-space:pre;border:0}.uci-change-legend{padding:5px}.uci-change-legend-label{float:left;width:150px}.uci-change-legend-label>ins,.uci-change-legend-label>del,.uci-change-legend-label>var{display:block;float:left;width:10px;height:10px;margin-right:4px}.uci-change-legend-label var ins,.uci-change-legend-label var del{line-height:.4;border:0}.uci-change-list var,.uci-change-list del,.uci-change-list ins{padding:.5rem}#iwsvg,#iwsvg2,#bwsvg{border:thin solid #d4d4d4 !important}#iwsvg,[data-page="admin-status-realtime-bandwidth"] #bwsvg{border-top:0 !important}.ifacebox{line-height:1.25;display:inline-flex;overflow:hidden;flex-direction:column;border-radius:4px;min-width:100px;border-bottom:thin solid #ccc;background-color:#f9f9f9;box-shadow:inset 0 1px 0 rgba(255,255,255,0.4),0 1px 2px rgba(0,0,0,0.2)}.ifacebox-head{padding:.25em;background:#eee}.ifacebox-head.active{background:#5e72e4;background:var(--primary)}.ifacebox-head.active *{color:#fff;color:var(--white)}.ifacebox-body{padding:.875rem 1rem;line-height:1.6em}.cbi-image-button{margin-left:.5rem}.zonebadge{display:inline-block;padding:.2rem .5rem;border-radius:4px}.zonebadge .ifacebadge{margin:.1rem .2rem;padding:.2rem .3rem;border:thin solid #6c6c6c}.zonebadge>input[type="text"]{min-width:10rem;margin-top:.3rem;padding:.16rem 1rem}.zonebadge>em,.zonebadge>strong{display:inline-block;margin:0 .2rem}.cbi-value-field .cbi-input-checkbox,.cbi-value-field .cbi-input-radio{margin-top:.1rem}.cbi-value-field>ul>li{display:flex}.cbi-value-field>ul>li>label{margin-top:.5rem}.cbi-value-field>ul>li .ifacebadge{margin-top:-0.5rem;margin-left:.4rem;background-color:#eee}.cbi-section-table-row>.cbi-value-field .cbi-dropdown{min-width:3rem}.cbi-section-create{display:inline-flex;align-items:center;margin:.25rem 1.25rem}.cbi-section-create>*{margin:.5rem 0}.cbi-section-remove{padding:.5rem}div.cbi-value var,td.cbi-value-field var,.td.cbi-value-field var{font-style:italic;color:#0069d6}.cbi-optionals{padding:1rem 1rem 0 1rem;border-top:thin solid #ccc}.cbi-dropdown-container{position:relative}.cbi-tooltip-container,span[data-tooltip],span[data-tooltip] .label{cursor:help !important}.cbi-tooltip{position:absolute;z-index:1000;left:-1000px;padding:2px 5px;transition:opacity .25s ease-out;white-space:pre;pointer-events:none;opacity:0;border-radius:3px;background:#fff;box-shadow:0 0 2px #444}.cbi-tooltip-container:hover .cbi-tooltip{left:auto;transition:opacity .25s ease-in;opacity:1}.zonebadge .cbi-tooltip{margin:-1.5rem 0 0 -0.5rem;padding:.25rem;background:inherit}.zonebadge-empty{color:#404040;background:repeating-linear-gradient(45deg, rgba(204,204,204,0.5), rgba(204,204,204,0.5) 5px, rgba(255,255,255,0.5) 5px, rgba(255,255,255,0.5) 10px)}.zone-forwards{display:flex;min-width:10rem}.zone-forwards>*{flex:1 1 45%}.zone-forwards>span{flex-basis:10%;padding:0 .25rem;text-align:center}.zone-forwards .zone-src,.zone-forwards .zone-dest{display:flex;flex-direction:column}.label{font-size:.8rem;font-weight:bold;padding:.3rem .8rem;white-space:nowrap;text-decoration:none;text-transform:uppercase;color:#fff !important;border-radius:3px;background-color:#bfbfbf;text-shadow:none}label>input[type="checkbox"],label>input[type="radio"]{position:relative;top:.4rem;right:.2rem;margin:0;vertical-align:bottom}label[data-index][data-depends]{padding-right:2em}.showSide{display:none}.darkMask{position:fixed;z-index:99;display:none;width:100%;height:100%;content:"";top:0;background-color:rgba(0,0,0,0.56);transition:all .2s}.darkMask.active{display:block}#diag-rc-output>pre,#command-rc-output>pre,[data-page="admin-services-wol"] .notice code{font-size:1.2rem;font-size-adjust:.35;line-height:normal;display:block;overflow-y:hidden;width:100%;padding:8.5px;white-space:pre;color:#eee;background-color:#101010;box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 2px 0 rgba(0,0,0,0.12)}[data-page="admin-network-diagnostics"] .table{box-shadow:none}input[name="ping"],input[name="traceroute"],input[name="nslookup"]{width:80%}.node-status-overview>.main fieldset:nth-child(4) .td:nth-child(2),.node-status-processes>.main .table .tr .td:nth-child(3){white-space:normal}[data-page="admin-system-reboot"] p{padding-left:1.5rem}[data-page="admin-system-reboot"] .cbi-button{background:#fb6340 !important}[data-page="admin-system-reboot"] p>span{position:relative;top:.1rem;left:1rem}[data-page="admin-vpn-passwall"] h4{background:transparent}#cbi-samba [data-tab="template"] .cbi-value-field{display:block}#cbi-samba [data-tab="template"] .cbi-value-title{width:auto;padding-bottom:.6rem}[data-page="admin-system-admin"] .cbi-map h2,[data-page="admin-system-admin-password"] .cbi-map h2,[data-page="admin-system-admin"] .cbi-map .cbi-map-descr,[data-page="admin-system-admin-password"] .cbi-map .cbi-map-descr{margin-left:0;color:#32325d;color:var(--gray-dark)}[data-page="admin-system-opkg"] h2{margin-left:0;color:#32325d;color:var(--gray-dark)}.controls{margin:.5em 1rem 1em 1rem !important}.controls>*>.btn:not([aria-label$="page"]){flex-grow:initial !important;margin-top:.25rem}.controls>#pager>.btn[aria-label$="page"]{font-size:1.4rem;font-weight:bold}.controls>*>label{margin-bottom:.2rem}[data-page="admin-system-opkg"] div.btn{line-height:3;display:inline;padding:.3rem .6rem}[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear),[data-page="admin-system-opkg"] #maincontent>.container{margin-top:2rem;padding-top:.1rem}[data-page="admin-system-opkg"] #maincontent>.container{margin:0 1.25rem 1rem 1.25rem;margin-bottom:1rem}.td.version,.td.size{white-space:normal !important;word-break:break-word}.cbi-tabmenu+.cbi-section{margin-top:0}[data-page="admin-system-crontab"] #view p{margin-bottom:1rem}[data-page="admin-system-flash"] .cbi-value{padding:0}[data-page="admin-system-flash"] .cbi-section .cbi-section{margin-top:0}[data-page="admin-system-flash"] .cbi-map-tabbed{border-radius:.375rem}[data-page="admin-system-flash"] legend{display:block !important;font-size:1.2rem;width:100%;display:block;margin-bottom:0;padding:1rem 0 1rem 1.5rem;border-bottom:1px solid rgba(0,0,0,0.05);line-height:1.5;margin-bottom:0rem;letter-spacing:.1rem;color:#32325d;font-weight:bold}[data-page="admin-system-flash"] .cbi-section-descr{font-weight:600;padding:1rem 0 1rem 1.5rem;color:#525f7f}[data-page="admin-system-flash"] .modal label>input[type="checkbox"]{top:-0.35rem}[data-page="admin-system-flash"] .modal .btn{white-space:normal !important}#cbi-wireless>#wifi_assoclist_table>.tr{box-shadow:inset 1px -1px 0 #ddd,inset -1px -1px 0 #ddd}#cbi-wireless>#wifi_assoclist_table>.tr.placeholder>.td{right:33px;bottom:33px;left:33px;border-top:thin solid #ddd !important}#cbi-wireless>#wifi_assoclist_table>.tr.table-titles{box-shadow:inset 1px 0 0 #ddd,inset -1px 0 0 #ddd}#cbi-wireless>#wifi_assoclist_table>.tr.table-titles>.th{border-bottom:thin solid #ddd;box-shadow:0 -1px 0 0 #ddd}#wifi_assoclist_table>.tr>.td[data-title="RX Rate / TX Rate"]{width:23rem}[data-page="admin-network-dhcp"] .cbi-value{padding:0}[data-page="admin-network-dhcp"] [data-tab-active="true"]{padding:1rem 0 !important}#iptables{margin:0}.Firewall form{margin:2rem 2rem 0 0;padding:0;box-shadow:none}#cbi-firewall-redirect table *,#cbi-network-switch_vlan table *,#cbi-firewall-zone table *{font-size:small}#cbi-firewall-redirect table input[type="text"],#cbi-network-switch_vlan table input[type="text"],#cbi-firewall-zone table input[type="text"]{width:5rem}#cbi-firewall-redirect table select,#cbi-network-switch_vlan table select,#cbi-firewall-zone table select{min-width:3.5rem}#cbi-network-switch_vlan .th,#cbi-network-switch_vlan .td{flex-basis:12%}#cbi-firewall-zone .table,#cbi-network-switch_vlan .table{display:block}#cbi-firewall-zone .td,#cbi-network-switch_vlan .td{width:100%}[data-page="admin-network-firewall-custom"] #view p,[data-page="admin-status-routes"] #view p{padding:0 1.5rem;margin-bottom:1rem}[data-page="admin-network-firewall-custom"] #view p textarea,[data-page="admin-status-routes"] #view p textarea{padding:1rem;border-radius:.375rem}#applyreboot-container{margin:2rem}#applyreboot-section{line-height:300%;margin:2rem}.OpenVPN a{line-height:initial !important}.commandbox{width:24% !important;margin:10px 0 0 10px !important;padding:.5rem 1rem;border-bottom:thin solid #ccc;background:#eee;box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.commandbox h3{line-height:normal !important;overflow:hidden;margin:6px 0 !important;white-space:nowrap;text-overflow:ellipsis}.commandbox div{left:auto !important}.commandbox code{position:absolute;overflow:hidden;max-width:60%;margin-left:4px;padding:2px 3px;white-space:nowrap;text-overflow:ellipsis}.commandbox code:hover{overflow-y:auto;max-height:50px;white-space:normal}.commandbox p:first-of-type{margin-top:-6px}.commandbox p:nth-of-type(2){margin-top:2px}[data-page^="admin-system-commands"] .panel-title,[data-page^="command-cfg"] .mobile-hide,[data-page^="command-cfg"] .showSide{display:none}#command-rc-output .alert-message{line-height:1.42857143;position:absolute;top:40px;right:32px;max-width:40%;margin:0;animation:anim-fade-in 1.5s forwards;word-break:break-word;opacity:0}@keyframes anim-fade-in{100%{opacity:1}}input[type="checkbox"]{appearance:none !important;-webkit-appearance:none !important;border:1px solid #dee2e6;width:16px !important;height:16px !important;padding:0;cursor:pointer;transition:all .2s;margin:1rem 0 0 0}input[type="checkbox"]:checked{border:1px solid #5e72e4;border:1px solid var(--primary);background-image:url('data:image/svg+xml,%3csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3e%3cpath fill=\'%23fff\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3e%3c/svg%3e') !important;background-color:#5e72e4;background-color:var(--primary);background-size:70%;background-repeat:no-repeat;background-position:center}.fb-container .cbi-button{height:auto !important}#cbi-usb_printer-printer em{display:block;padding:1rem;text-align:center}pre.command-output{padding:1.5rem}[data-page="admin-nlbw-display"] .cbi-section[data-tab="export"]{padding:1.5rem !important}[data-page="admin-nlbw-backup"] form{padding-left:1.5rem}[data-page="admin-status-iptables"] .right{margin-bottom:0 !important}@media all and (-ms-high-contrast:none){.main>.main-left>.nav>.slide>.menu::before{top:30.25%}.main>.main-left>.nav>li:last-child::before{top:20%}.showSide::before{top:-12px}}@media screen and (max-width:1600px){header>.fill>.container>#logo{margin:0 2.5rem 0 .5rem}.main-left{width:calc(0% + 13rem)}.main-right{width:calc(100% - 13rem)}.btn:not(button),.cbi-button{font-size:.8rem}.label{padding:.2rem .6rem}.cbi-value-title{width:15rem;padding-right:.6rem}.cbi-value-field .cbi-dropdown,.cbi-value-field .cbi-input-select,.cbi-value input[type="text"],.cbi-value input[type="password"]{min-width:18rem}#cbi-firewall-zone .cbi-input-select{min-width:9rem}.cbi-input-textarea{font-size:small}.node-admin-status>.main fieldset li>a{padding:.3rem .6rem}}@media screen and (max-width:1366px){header>.fill>.container{cursor:default}.main-left{width:calc(0% + 13rem)}.main-right{width:calc(100% - 13rem)}.tabs>li>a,.cbi-tabmenu>li>a{padding:.2rem .8rem}.panel-title{font-size:1.1rem;padding-bottom:1rem}table{font-size:.7rem !important;width:100% !important}.table .cbi-input-text{width:100%}.cbi-value-field .cbi-dropdown,.cbi-value-field .cbi-input-select,.cbi-value input[type="text"],.cbi-value input[type="password"]{min-width:16rem}#cbi-firewall-zone .cbi-input-select{min-width:4rem}.main>.main-left>.nav>li,.main>.main-left>.nav>li>a,.main .main-left .nav>li>a:first-child,.main>.main-left>.nav>.slide>.menu,.main>.main-left>.nav>li>[data-title="Logout"]{font-size:.9rem}.main>.main-left>.nav>.slide>.slide-menu>li>a{font-size:.7rem}#modal_overlay{top:0rem}[data-page="admin-network-firewall-forwards"] .table:not(.cbi-section-table){display:block}[data-page="admin-network-firewall-forwards"] .table:not(.cbi-section-table),[data-page="admin-network-firewall-rules"] .table:not(.cbi-section-table),[data-page="admin-network-hosts"] .table,[data-page="admin-network-routes"] .table{overflow-y:visible}.commandbox{width:32% !important}.btn:not(button),.cbi-button{font-size:.8rem}}@media screen and (max-width:1152px){header>.fill>.container>#logo{display:none}header>.fill>.container>.brand{position:relative}html,.main{overflow-y:visible}.main>.loading>span{top:25%}.main-left{width:calc(0% + 13rem)}.main-right{width:calc(100% - 13rem)}body:not(.logged-in) .showSide{visibility:hidden;width:0;margin:0}.node-main-login>.main .cbi-value-title{text-align:left}.cbi-value-title{width:12rem;padding-right:1rem}.cbi-value-field .cbi-dropdown,.cbi-value-field .cbi-input-select,.cbi-value input[type="text"]{width:16rem;min-width:16rem}.cbi-value input[name^="pw"],.cbi-value input[data-update="change"]:nth-child(2){width:13rem !important;min-width:13rem}#diag-rc-output>pre,#command-rc-output>pre,[data-page="admin-services-wol"] .notice code{font-size:1rem}.table{display:block}.Interfaces .table{overflow-x:hidden}#packages.table{display:grid}.tr{display:flex;flex-direction:row;flex-wrap:wrap}.Overview .table[width="100%"]>.tr{flex-wrap:nowrap}.tr.placeholder{border-bottom:thin solid #ddd}.tr.placeholder>.td,#cbi-firewall .tr>.td,#cbi-network .tr:nth-child(2)>.td,.cbi-section #wifi_assoclist_table .tr>.td{border-top:0}.th,.td{display:inline-block;align-self:flex-start;flex:2 2 10%;text-overflow:ellipsis;word-wrap:break-word}.td select,.td input[type="text"]{width:100%;word-wrap:normal}.td [data-dynlist]>input,.td input.cbi-input-password{width:calc(100% - 1.5rem)}.td[data-type="button"],.td[data-type="fvalue"]{flex:1 1 12.5%;text-align:left}.th.cbi-value-field,.td.cbi-value-field,.th.cbi-section-table-cell,.td.cbi-section-table-cell{flex-basis:auto;padding-top:1rem}.cbi-section-table-row{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 2px 0 rgba(0,0,0,0.12)}.td.cbi-value-field,.cbi-section-table-cell{display:inline-block;flex:10 10 auto;flex-basis:50%;text-align:center}.td.cbi-section-actions{vertical-align:bottom}.tr.table-titles,.tr.cbi-section-table-titles,.tr.cbi-section-table-descr{display:none}.tr[data-title]::before,.tr.cbi-section-table-titles.named::before{font-size:.9rem;display:block;flex:1 1 100%;border-bottom:thin solid rgba(0,0,0,0.26);background:#e9ecef}.td[data-title],[data-page^="admin-status-realtime"] .td[id]{text-align:left}.td[data-title]::before{display:block}.cbi-button+.cbi-button{margin-left:0}.td.cbi-section-actions>*>*,.td.cbi-section-actions>*>form>*{margin:2.1px 3px}.Firewall form{position:static !important;margin:0 0 2rem 0;padding:2rem;box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 2px 0 rgba(0,0,0,0.12)}.Firewall form input{width:100% !important;margin:0;margin-top:1rem}.Firewall .center,.Firewall .center::before{text-align:left !important}.commandbox{width:100% !important;margin-left:0 !important}.btn:not(button),.cbi-button{font-size:.8rem}}@media screen and (max-width:768px){body{font-size:.8rem}.cbi-progressbar::after{font-size:.6rem}.main-left{position:fixed;z-index:100;width:0}.main-left.active{width:13rem}.main-right{width:100%}.main-right.active{overflow-y:hidden}.darkMask.active{display:block}.showSide{padding:.1rem;position:relative;z-index:99;display:inline-block !important}.showSide::before{font-family:'argon' !important;font-style:normal !important;font-weight:normal !important;font-variant:normal !important;text-transform:none !important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e20e";font-size:1.7rem}header>.fill>.container>.flex1>.brand{display:inline-block}.main>.main-left>.nav>.slide>.slide-menu>li>a{font-size:.8rem}}@media screen and (max-width:600px){.mobile-hide{display:none}#maincontent>.container{margin:0 1rem 1rem 1rem}.cbi-value-title{text-align:left}[data-page="admin-system-flash"] legend{padding:1rem 0 1rem 1rem}[data-page="admin-system-flash"] .cbi-section-descr{padding:1rem 0 1rem 1rem}[data-page="admin-system-flash"] .cbi-value{padding:0 1rem}[data-page="admin-network-dhcp"] [data-tab-active="true"]{padding:1rem 1rem !important}.cbi-dynlist p{padding:.5rem 1rem}body{overflow-x:hidden}.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-field{width:16rem}.node-main-login footer{display:none}.tabs::-webkit-scrollbar,.cbi-tabmenu::-webkit-scrollbar{width:0px;height:0px}.cbi-value-field,.cbi-value-description{display:block !important;padding-left:0 !important;padding-right:0 !important}[data-page="admin-system-admin-password"] .cbi-value-field{display:table-cell !important}.modal.cbi-modal{max-width:100%;max-height:none}.modal{display:flex;align-items:center;flex-wrap:wrap;width:100%;min-width:270px;max-width:600px;min-height:32px;margin:5em auto;padding:1em;border-radius:3px !important;background:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 2px 0 rgba(0,0,0,0.12)}.cbi-dropdown[open]>ul.dropdown{left:.2rem !important;right:0 !important;margin-bottom:1rem}.login-page .login-container footer{display:none}}@media screen and (min-width:600px){::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar,::-webkit-scrollbar-corner{background:transparent}::-webkit-scrollbar-thumb{background:#9e9e9e}::-webkit-scrollbar-thumb:hover{background:#757575}::-webkit-scrollbar-thumb:active{background:#424242}}@media screen and (max-width:480px){.mobile-hide{display:none}.login-page .login-container{margin-left:0rem !important;width:100%}.login-page .login-container .login-form .form-login .input-group::before{color:#525461}.login-page .login-container .login-form .form-login .input-group input{color:#525461;border-bottom:white 1px solid;border-bottom:var(--white) 1px solid;border-radius:0}} \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/css/dark.css b/luci-theme-argon/htdocs/luci-static/argon/css/dark.css new file mode 100755 index 000000000..0a5759093 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/css/dark.css @@ -0,0 +1 @@ +body{background:#1e1e1e;color:#cccccc}.login-page .login-container .login-form{background-color:#1e1e1e;-webkit-backdrop-filter:blur(var(--blur-radius-dark));backdrop-filter:blur(var(--blur-radius-dark));background-color:rgba(0, 0, 0, var(--blur-opacity-dark))}.login-page .login-container .login-form .brand{color:#adb5bd}.login-page .login-container .login-form .form-login .input-group::before{color:#adb5bd}.login-page .login-container .login-form .form-login .input-group input{background-color:transparent !important;color:#adb5bd;border-bottom:#adb5bd 1px solid !important;border-radius:0 !important;border-top:none !important;border-left:none !important;border-right:none !important;box-shadow:none}.login-page .login-container .login-form .form-login .cbi-button-apply{background-color:#483d8b !important;background-color:var(--dark-primary) !important}.login-page .login-container .login-form .form-login .cbi-button-apply:hover,.login-page .login-container .login-form .form-login .cbi-button-apply:focus{opacity:.9}header::after{background-color:#1e1e1e !important}.main .main-left{background-color:#333333 !important;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.15)}.main .main-left .sidenav-header .brand{color:#ccc}.main .main-left .nav .slide .slide-menu .active a{color:#cccccc}.main .main-left .nav .slide .slide-menu .active a::after{background-color:#cccccc !important}.main .main-left .nav .slide .slide-menu li a{color:#cccccc}.main .main-left .nav .slide .slide-menu li a:hover{background:none !important}.main .main-left .nav .slide .menu.active{background-color:#483d8b !important;background-color:var(--dark-primary) !important;color:#cccccc !important}.main .main-left .nav .slide .menu.active a::after{background-color:#cccccc !important}.main .main-left .nav li a{color:#cccccc !important}.main .main-left .nav li a:hover{background-color:#483d8b !important;background-color:var(--dark-primary) !important;color:#cccccc !important}.main .main-left::-webkit-scrollbar-thumb{background-color:#252526 !important}.main .main-left::-webkit-scrollbar-track{background-color:#333}.main .main-right{background-color:#1e1e1e}h2{color:#ccc;background:#333333}h3{color:#ccc;border-bottom:0;background:#333333}a:-webkit-any-link{color:-webkit-link;cursor:pointer;color:#483d8b;color:var(--dark-primary)}input:-webkit-autofill{background-color:#3c3c3c !important}.cbi-value-field .cbi-input-apply,.cbi-button-apply,.cbi-button-edit{color:#fff !important;background-color:#483d8b !important;background-color:var(--dark-primary) !important;border-color:#483d8b !important;border-color:var(--dark-primary) !important}.cbi-section em{color:#ccc}header.bg-primary{background-color:#1e1e1e !important}.cbi-map-descr{color:#ccc}.cbi-section{background:none;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35)}.panel-title{color:#ccc;background-color:#333333;border-bottom:0px}div>table>tbody>tr:nth-of-type(2n),div>.table>.tr:nth-of-type(2n){background-color:#252526}table>tbody>tr>td,table>tfoot>tr>td,table>thead>tr>td{color:#ccc}fieldset>table>tbody>tr:nth-of-type(2n){background-color:#252526}table>tbody>tr>td,table>tfoot>tr>td,table>thead>tr>td{border-top:1px solid #252526}#swaptotal>div>div,#swapfree>div>div,#memfree>div>div,#membuff>div>div,#conns>div>div,#memtotal>div>div{background-color:#32325d !important}#swaptotal>div>div>div>small,#swapfree>div>div>div>small,#memfree>div>div>div>small,#membuff>div>div>div>small,#conns>div>div>div>small,#memtotal>div>div>div>small{color:#ccc !important}.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last{line-height:1.8em}.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"]{border:1px solid #999999 !important;background-color:transparent !important}.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] div{background-color:#32325d !important}table>tbody>tr>th,table>tfoot>tr>th,table>thead>tr>th{background-color:#252526;border-bottom:black 1px solid !important}tr>td,tr>th,.tr>.td,.tr>.th,.cbi-section-table-row::before,#cbi-wireless>#wifi_assoclist_table>.tr:nth-child(2){border-top:0}.cbi-rowstyle-2{background-color:#1e1e1e}.cbi-rowstyle-1{background-color:#252526}.cbi-rowstyle-2 .cbi-button-up,.cbi-rowstyle-2 .cbi-button-down,body:not(.Interfaces) .cbi-rowstyle-2:first-child{background-color:#666 !important}.cbi-section>h3:first-child,.panel-title,h3{color:#ccc;border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}h4{background-color:#1e1e1f}.cbi-progressbar{position:relative;min-width:170px;height:20px;margin:6px 0;border:thin solid #999;background:transparent;border-radius:.2rem;overflow:hidden}.cbi-progressbar div{background-color:#32325d !important}.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell{background-color:#1e1e1f}.cbi-button{color:#ccc !important;background-color:#483d8b;background-color:var(--dark-primary)}.cbi-section-node{background:none;border-radius:0 0 .375rem .375rem;padding:0rem}abbr{color:#5e72e4}div>table>tbody>tr:nth-of-type(2n),div>.table>.tbody>.tr:nth-of-type(2n){background-color:#252526}#content_syslog{box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35)}#syslog{color:#ccc;background-color:#1e1e1e}#iwsvg,#iwsvg2,#bwsvg{overflow:hidden;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35);background-color:#1e1e1e !important}.tabs{background-color:#252526}.tabs>li[class~="active"]>a{color:#ccc}.tabs>li[class~="active"],.tabs>li:hover{border-bottom:.18751rem solid #483d8b;border-bottom:.18751rem solid var(--dark-primary);color:#ccc;background-color:#181819}.cbi-tabmenu>li>a,.tabs>li>a{color:#ccc}.cbi-tabmenu>li>a:hover,.tabs>li>a:hover{color:#ccc}.cbi-tabmenu>li{background:#2d2d2d}.cbi-tabmenu li[class~="cbi-tab"] a{color:#ccc}.cbi-tabmenu>li:hover{color:#ccc;background:#2d2d2d}.cbi-tabmenu>li[class~="cbi-tab"]{background-color:#181819}.cbi-tabcontainer>.cbi-value:nth-of-type(2n){background-color:#252526}.cbi-value-title{color:#ccc}select,input{color:#ccc;background-color:transparent !important;border:1px solid #252526;box-shadow:none}select:not([multiple="multiple"]):focus,input:focus{border-color:#483d8b !important;border-color:var(--dark-primary) !important;outline:0}select{background-color:#1e1e1e !important}#cbi-dropbear h2,#cbi-dropbear .cbi-map-descr,#cbi-dropbear .cbi-map-descr abbr,#cbi-rc h2,#cbi-rc .cbi-map-descr,#cbi-distfeedconf h2,#cbi-distfeedconf .cbi-map-descr,#cbi-customfeedconf h2,#cbi-customfeedconf .cbi-map-descr,#cbi-download h2,#cbi-filelist h2{color:#ccc !important}.cbi-value-field>ul>li .ifacebadge{background-color:#3c3c3c}.cbi-section-descr{color:#ccc}.cbi-input-textarea{background-color:#1e1e1e;color:#ccc}.cbi-section-remove:nth-of-type(2n),.cbi-section-node:nth-of-type(2n){background-color:#1e1e1e}.node-system-packages>.main table tr td:nth-last-child(1){color:#ccc}.cbi-section-node .cbi-value{padding:1rem 1rem .3rem 1rem}.ifacebox{background-color:none;border:1px solid #1e1e1e}.ifacebox-head{color:#666}.ifacebox-body{background-color:#333}.zonebadge strong{color:#333}.zonebadge>.ifacebadge{background-color:#3c3c3c}div.cbi-value var,td.cbi-value-field var{color:#5e72e4}#diag-rc-output>pre{color:#ccc;background-color:#1e1e1e}.node-services-vssr .block{background-color:#3c3c3c !important;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35)}.node-services-vssr .block h4{color:#ccc !important}.node-services-vssr .status-bar{color:#ccc;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35);background-color:#1e1e1e}.node-services-vssr .cbi-section-table-row{color:#ccc;background-color:#3c3c3c !important;box-shadow:0 0 5px 0 rgba(0,0,0,0.35)}.node-services-vssr .cbi-section-table-row.fast{background:#483d8b !important;background:var(--dark-primary) !important;color:#fff}.node-services-vssr .ssr-button{color:#ccc}.node-services-vssr .incon:nth-child(2){border-right:#1e1e1e 1px solid}#xhr_poll_status>.label.success{color:#ccc !important;background-color:darkolivegreen !important}.notice{background-color:#483d8b !important;background-color:var(--dark-primary) !important}.cbi-input-find,.cbi-input-save,.cbi-button-add,.cbi-button-save,.cbi-button-find,.cbi-input-reload,.cbi-button-reload{color:#fff !important;background:darkolivegreen !important;border-color:darkolivegreen !important}.cbi-button-reset,.cbi-input-remove{color:#fff !important;background-color:darkorange !important;border-color:darkorange !important}.cbi-page-actions .cbi-button-apply,.cbi-section-actions .cbi-button-edit,.cbi-button-edit.important,.cbi-button-apply.important,.cbi-button-reload.important,.cbi-button-action.important{border:1px #483d8b solid !important;border:1px var(--dark-primary) solid !important}.btn[value="Dismiss"],.cbi-button[value="Terminate"],.cbi-button[value="Reset"],.cbi-button[value="Disabled"],.cbi-button[onclick^="iface_reconnect"],.cbi-button[onclick="handleReset(event)"],.cbi-button-neutral[value="Disable"]{font-weight:normal;color:#fff;border:thin solid darkorange !important;background-color:darkorange !important}fieldset[id^="cbi-apply-"]{background-color:#333333}#detail-bubble>div{border:1px solid #ccc;border-radius:2px;padding:5px;background:#252525}.ifacebox-head.active{background-color:#32325d !important}header .fill .status span[data-style="active"]{color:#ccc !important;background-color:darkolivegreen !important}#cbi-wireless .td,#cbi-network .tr:first-child>.td,.table[width="100%"]>.tr:first-child>.td,[data-page="admin-network-diagnostics"] .tr>.td,.tr.table-titles>.th,.tr.cbi-section-table-titles>.th{background-color:#252526;border-bottom:black 1px solid !important}.network-status-table .ifacebox-body .ifacebadge{background-color:#252526;border-bottom:0;box-shadow:none}td>.ifacebadge,.td>.ifacebadge{background-color:#483d8b;background-color:var(--dark-primary);border:0}.btn.danger,.cbi-section-remove>.cbi-button,.cbi-button-remove,.cbi-button-reset,.cbi-button-negative,.cbi-button[value="Stop"],.cbi-button[value="Kill"],.cbi-button[onclick="reboot(this)"],.cbi-button-neutral[value="Restart"]{border:thin solid darkorange !important;background-color:darkorange !important}.cbi-section,.cbi-section-error,#iptables,.Firewall form,#cbi-network>.cbi-section-node,#cbi-wireless>.cbi-section-node,#cbi-wireless>#wifi_assoclist_table,[data-tab-title],[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear),[data-page="admin-system-opkg"] #maincontent>.container{background:#1e1e1e !important;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35)}div[style="width:100%;height:300px;border:1px solid #000;background:#fff"]{background:transparent !important}[data-page="admin-system-admin"] .cbi-map h2,[data-page="admin-system-admin-password"] .cbi-map h2,[data-page="admin-system-admin"] .cbi-map .cbi-map-descr,[data-page="admin-system-admin-password"] .cbi-map .cbi-map-descr{color:#ccc}[data-page="admin-system-flash"] .modal label>input[type="checkbox"]{top:-0.35rem}[data-page="admin-system-flash"] .modal .btn{white-space:normal !important;background-color:darkseagreen}[data-page="admin-system-flash"] .modal .alert-message{background-color:transparent !important}[data-page="admin-system-flash"] .modal .danger{border:thin solid darkorange !important;background-color:darkorange !important}.cbi-value input[type="password"]+.cbi-button-neutral{background-color:#483d8b !important;background-color:var(--dark-primary) !important}.btn,button,select,input,.cbi-dropdown{border:1px solid #3c3c3c !important}.cbi-dropdown .preview{color:#ccc}.cbi-section-table-row{background-color:#1e1e1e !important}.modal{background-color:#1e1e1e}.cbi-button-positive{color:#fff !important;background-color:darkolivegreen !important}[data-page="admin-system-flash"] legend{color:#ccc}.logout:before{color:#adb5bd !important}.cbi-dropdown[open]{border-color:#483d8b !important;border-color:var(--dark-primary) !important}.cbi-dropdown[open]>ul.dropdown{background:#252526 !important;color:#ccc !important;box-shadow:none;border:1px solid #3c3c3c !important}.cbi-dropdown[open]>ul.dropdown li{color:#ccc;border-bottom:1px solid #3c3c3c !important}.cbi-dropdown[open]>ul.dropdown>li[selected]{background-color:#483d8b !important;background-color:var(--dark-primary) !important;border-bottom:1px solid #3c3c3c !important}.cbi-dropdown[open]>ul.dropdown>li.focus{background:#483d8b;background:var(--dark-primary);outline:none}.ifacebadge{background-color:#333333}.cbi-dynlist>.item>span{border:1px solid #3c3c3c !important}.cbi-page-actions .cbi-button-apply,.cbi-section-actions .cbi-button-edit,.cbi-button-edit,.cbi-button-apply,.cbi-button-reload,.cbi-button-action,.cbi-button[value="Submit"],.cbi-button[value="Upload"],.cbi-button[value$="Apply"],.cbi-button[onclick="addKey(event)"]{background:#483d8b !important;background:var(--dark-primary) !important}.btn.primary,.cbi-page-actions .cbi-button-save,.cbi-page-actions .cbi-button-apply+.cbi-button-save,.cbi-button-add,.cbi-button-save,.cbi-button-positive,.cbi-button-link,.cbi-button[value="Enable"],.cbi-button[value="Scan"],.cbi-button[value^="Back"],.cbi-button-neutral[onclick="handleConfig(event)"]{background:#483d8b;background:var(--dark-primary)}[data-page="admin-system-opkg"] h2{color:#ccc !important}@media screen and (max-width:480px){.node-status-iptables>.main div>.cbi-map>form{background-color:#1e1e1e;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35)}} \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/favicon.ico b/luci-theme-argon/htdocs/luci-static/argon/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..4611336803d49af0896adf2698cfaec54e96b800 GIT binary patch literal 15406 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 BLQ((# literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.eot b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.eot new file mode 100755 index 0000000000000000000000000000000000000000..efce636a84d6da92d5e40498fc945e93a90e4307 GIT binary patch literal 33846 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 M>%j(UEQQ4X1Pp)(oB#j- literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.svg b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.svg new file mode 100755 index 000000000..c555b7594 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.svg @@ -0,0 +1,1191 @@ + + + + +Created by FontForge 20090622 at Tue Jul 23 03:29:07 2019 + By deploy user +TypoGraphica ©Sharkshock Productions 2015. All Rights Reserved + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.ttf b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.ttf new file mode 100755 index 0000000000000000000000000000000000000000..e11f89a0f749b95a9001e33de3100be7a0bb858e GIT binary patch literal 33632 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 literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.woff b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.woff new file mode 100755 index 0000000000000000000000000000000000000000..fef38ca003e3d02372d80287057424843e6bd4f0 GIT binary patch literal 17816 zcmZsCV{m3c*Xz>;GU(Z<-;#0mfa{n3HN0{}3#(Fw6? zCVCD(zC1tpzw`TLV(Di5Gyd=sb{qgu%AK+dbucy3GXwyD5`T1T{{bRsHooZ(`NK{A z*!VvnK@5P1G_`X4IagrKA71XKrYIeiyw~Q zKLF|jRkGHzG6DcNdVlyW1)%=4KNA2D0hj;|KfO>O z(Ekws@i&Gt&g|_S@9pD?SWNZvo5T3SJfkmWfTXXh3oOwGP+$f@y19{;)3w#r)txiB zd|mFfO%BL8<&aB7BpLb0X~GtxWMBXSoL|DQ{Txp?j+Y`x4`pQLo$op%rnJ;C2}QKIhPRvSqD+=b#$c<{%wl@Ike(&E#e3xL}*O!V?RN7psM=KB`;bEk-Ac&Rc=b03SboAh$CnS0ApK zRX8rg&k>_IMp+WrV)z)uQ%6>26ji>>#R(p?vYn*qN6O5#L=wp zWlBO1hX@8pcQ#|UIXXKSmVwMEH2!rQu9~OH`!?jOl>(C^sgkkP<4#M5;h5%-w`_@K z>MB{0%kGEXPIv3AWmMhqWg{skmAB$6vFk{m5AWbxuF>-#^zPSX@ty5*HQDxUosnnp z7T2|=SaF#@0>6TLjtDvY!yEWeP=UxZk15jE%+=3n{!Q z_?(bq(i>H1zFfUxr_^7(Je8DRcu;Y?SXba=i&ZhPS&ah_H4) zDT?t1$4FF3d%;9o1`@$E$Rt1xghbYhrz}p>OQvv`Z0IGDq-p4K7@+gG zaQGd`5rPx9lZq@O9#1rdd8`>rC>hO@qG?CV?>2$^%yT2wMX^vAaSJwXNg4d#=d()L z%w=8#1=meHGmwT9hSpqfaL}w)gv_$f7fPVsfIus=Dk(Pth5NMoHf(!G=iYG5;e_2= z{TiE|B)0L`Ha(%h<#=jwa@`0?J$?n|JT5VVerREdEb4*>>NHq-Lf(^t+k?<3d~6#` z{#RA60jYb4Tg z&O+1^b8~QOjiK)@DPyo-8gfG`1#UiO{nB9LUhG*d=q#S=y$qM4XCYRl(jgoim!)X% z5mSbFR_H#MD^0dM5Sn#QLw=8!&3)w1m(XMuL34C*`~&LLa{wE_TO0%7)9Dg^*dGYM z8>!!tha&G6l32l!j%SO+Q59d!moV?5CX;c?Lc2|_)#-44C}LjYSjfVdSrQykmQl3l zNnbD{Qz&u%dv7WcKtY-Xg?E1r7>_ZHS6Nq;)<2wMiB4lAj0^n@^ZZZo*Mtm>8MMH? zsff*0uvxWM1e)31Z{Ft<-mW%O>#K*vW{}UyxtztaRQRWUM|Um)>RYq5Ln7hRw^K}S zsXc)uV5T@)wt>U|2%As%e-q2eI6=$cD_58I)TLfaLN|p#@7S|=vWt{ZQbDOop~}DY zt1Q%##}+Hm%0?Gl1k;tfE9XJO?KShZJTdp*dW?-}7)d>QkV{NNHQkTaQhpV4zObFU zv(zX=90Ko6-et-(&}=W8MIS&f^#4khWC%PQ`2iEGo}1c4d09#Pa1(PKY-}J01EXk+ z=25;qYmz2ao)!yL6QL|riv(4;$zl(a96g@f0FEk5p`_td4aV`fXo0=wd3Z8=R2KD) z>SGIn=zFFs<@r#5j{mp0MR~k--O=ut(hHoRY%{V_h9XaU@x*aCp4K-#6;&nJ8(iTZ z8WbZnwpM1ue$gx$LDt!ELSr^#ytT)6qp6wQuM7-Am{RW#Z0IPkD}j>A!b)e`rL%J@ zwW}-v&P=G}!qf~mFKW-YI5o4LQ5vHeQ9guLV38sw%O<}i=&g%{)DS6~coYBDD1DfC zwq|AleUK3z-7QaYKk?LdbC5QLRy`1Jfm99KEvS^zEsBXe55#vKXv*)UGLAT2DlFm~ z%O{bQ^N!d%4IB_CY40+85G7$#DiLWgmZ(JR^1c+iX6uaDI*`xM@XcD9ikF+ZA+I7s z4RAtyO8v)^lai*C(gdoO9L%9Zj}jXJ1~KW$?JagKoWi?m<@!na_1=Xlk;8?iqgmI* zymmK5uWOEXq3QJEjH|Gat>wluXIn;em`bmVfX2izFefiny?_&YJIX|NOzD5zS3tpF z;1Ar1`upGId~7+#5=wfGIAblyk5&(y7$DyuPuudJfQL_vcFll^`>vzG5^OIHjpB-v zp*PAmxJh*j>*Q)6c9u9k9(5A~1;q4&{JxVbRVC>kxtNh+b+XhkDYxfQLlC zq~~MvtHFmMw2a@powx975JvEGm7w@b|CfT#qN9n}XB2wyTZe$u=Kw)5-#q=WeOezq z@pe%^kP&*u%&W)VCkO)7@1FnW3^!YSwnP;A#KZOt0%eA;+x-a?(G}0Ur>2~D-5jkTnAHe z(Q65rCjA@#lNWZ68G{i62#`F1Y5zaDkgm9Yzcj}#b+Sq&W@W^R(8_eJWSz~v?M~?q z%3fv=xQ(rm?dR_FKHuQLNJHo`Tn(rV{598>iKo6Np{L3V?n@42Amqj`6hxX|nPjdq zVj>iOOwpK7mXN#2^vUmpSOg!ESAgyKZo#1l!;r$j;-%ufM=N97 zNGb?5h~6cqMXr)OQMFqo{G{`Q^|JEg^~3kDi^L`96OSo<Rs11J)vARhmx$7Hmlg1-k!G9 zX`0l#$}}u0I*e$Q*OO^i<1NM6>J2CUG?T2~SqE6zGU!HP8Z;RCfyPTgf-=#NF@&Y` z#)2Z%1I8qoV3`jjjm4O5jxxs3$>?F2XPk9<6r8Rvt!c^9p0_-0x|i#VuF4&*d7aJ{ zIKMfa%Hv=-?GkQtU%*HTL>jT8@-QFJPrx1w9{6h!LTsUH20>iWw*nCC(Wd*{+L#*6 z%rdDDJ#V(AR$GbgD84}XLZ5-Ata$<cY;1JTS3wOBr$RlSppneuz$81pTTFc z^_(tM>%@HuE1#<|2Z}iurO+W~ZZn=_lo2qsBdrqXTj<`JuNh#NbzeBGVG+&e26Hu% zb9D!tE%VrO8FJRXW-VW~m)fU+Z;Zi3g>Omzj-01=rZBSNnOB}Fywv0IqOsd zdl+$ozw<~w7lDw|&U_K3vQ*Jy-sb)McumRLUo>TOL--)73nPP^o>sQuGbL1l7A=~< zUlJ}z$_h`QD-<7E3i-gYMcnM?!b&^?^H?d5L@KvHvgt~5?B_*8)`M3=*rY=6pv7(~ z@aAW-eJ9ie7BG$MsY`$2`Wy28mODQCZs9HI-=d{vWJxr38@sN*O z6(SikuUj_?>C+ERIb1vxsaWJ{-OzdE*TM_Y+KB>h7_zKSjRY5{rMF+3GPZ19!NHRi z4_iL0&)9`>eo;KT->Jf@kxd5M(q&K!AIDK{kfwT0UNKC7!k((%Jg230;P9}$7b~^_ z<@jL7!0TMGDO-`ix1kMwN1ebS3#3Q7L^@*J<%sK*j0gS0f$^4v<|%|SYJu8Gvuqo9 zEG)3Y;ZLd%H$|fx2{rvqlqpYCq`EhluitMFfq2!+$ti=hgScYKkX8jgchZcxvz0kD zh!`hE79c>7EDXN&chJFKjDrXT2*#Eh9}QQ;PjxCE@Z9IWO3`N(IwuynqU(5@NnyvJ z*btQx2BwPUN?*Iu;Bmf3htIvWaTD3&v2O^zfxrCImXwDYK;FWs;E~rLGEO}W! zV+cfR4C}|0?s>=5aq;LT+1ah1b{0$Hp?P>n7bC^`C9jt3mAh_?Ouym*%OGgnV0qu( zb=ZxRv1xiBB}irS;x7Gua?RF|c1lo5qrgc)09nBWj0O4+BF#Q?6|$!;Ya_s;iq7xd zN;pF$nr&8Fe33t)D}PWw-@M2iziU{DL^rPCHn0U1J7Qd@VQ|ct7*WVIgq8_%7)%|= zeT@53IkirhjtF$ehtUMAfcRGcWO*p3l+rdR-6~Z$5hYL(^E!^mwE8#$Lv`hL4MIi6_j5-VW%&kbYr$l3a zH@es~_tcPxjI9GIXcmOT9Vc`Qa?{heLl}E6mu*enMtUw^FSg7R)0bJD7QlV3Pf;vc#!6&D2S)mu znva$L+d4kaTL;7a?Z?3*ztSe>0iwprm0q`Q3At)+bt`OigJBUx(XLMcF%F0yZT9W@ zbzMqK@muZXd=3knX2R6*kh+Ga(LnTEzow-5X?S4UP4~UISs9^IeZ5)QCw@D@a<%cW zS%bV%xK1H8W1vRf*O=n6dy6Xc!OA@KK2k2aV8 zt8ASK(V&WNXT@xG>UMlo_7YJ3r}yjJHduq(Xz%>t8!6+ zYK@f^3eEOuM0tRTd!-2keiPfmonX?KYE3NeCjYg&6H6UMM32?%Xz`m0YO+wXsBfb~ zqN0bB^KzKPyVA6kUZkz+H-|%rKtW=c_spb2(YP}C)FQ{{Y_<|Tjvo)tj$Uh>(O945 zclr^PH$6p5WrHK$?IEC31Ju6z6dJ)nN=kBjIRK2Oq+ zB8?sw0a>X$(k=r(B32yqz2FcVU?izwpfr#{S%tHip;X|Df7U~V`|r)b&) zV|u=-bv%m%8tspHhjWNeYMyI=KZQ{+RnL2XJ`|ria5)AcrwCe&GDr%wl~)mu;qAOh z93aWHRGHPbUvOYmdEo*qfrj()Zgjimmv?&kjyJX!0*{sAXt}wyvGIqFvc@w|Z>sg5 zx2e74@_4!LsotWj7sADzS1FGEWx=sqEF!qyke(@@`5%r!n>-AZ;b}WC7||voETFw! zh8;!`QQ8M0*O1X}PxjQ;$F)bCtAIRzrHTj@l|F?Di$6rEj8Y+oX-1SR-+!!_Z&4~S zX-f~Z-Q3=j@w)Two2xX^Gq{=Aw_bJxMQyIsziwl`z92}u*IezTslcYmmv|Db5wG6g zwk|u|j^igMCvQWdakSIbnjelb@Vh?ld%jz!gI%q}Pxpob#@gHe{ab1#H0FkKL39-V z&3h(hwXgw8T)Z0y>OeOx5hjo}(zK)ohj^Aa9l+$UK+}(-5A>~EXTQN&B;FRG6R}Q@ zd$==<(_j$zI{dd0N7^V-(trs9*^ia^XgtG0f*&})^3V|vXMtvbnH;*~sD;h8cWNkE zQCb=f;e!ARt|B{b4Am|5Q7^t~`WW1im~B0<49GgZQ%>GaznE%vq0wHDt4i}_@GU-G zwmGnWJV>|H;&pg#Ohslx9$Blcs*F&3zQz51nAQb{b74Ng8uN?iE5o&u6g7fed4YXU zU$D^4p^{6kg&RX^x)Re=Ceiiz>iy}>kM%YwAb?#Ku1YJDidvFI#+tXzYF_m%7)ESy zy#iKNuB!|20WG%jK+0mxO(eqDTg^22WhudW(HyK}(bL%DjwkLNYhu& zc7RH0L6e_l>EiD2>6=NazB4iys-vq&07<`lP!e_MG=_{v?RMy=8GqY;HghYAP0w8i zbHGz_kUY>?-SE?LqZimNAN8iO+gS_9bsGDBDzp68hshHZu ziG7)9Da2UcWzZFK=ty3wK7r=W!?>`(GG%bX#Cd1sM9eq(57@ng2AnD3{a>9zffP?WsxUsQ<8O>OvGsXTYnWCr|<8( z()J;BhA3Y`*z79skruO6em&niO(xaZ>I!kBvhlH;&ljeWc?J76+Eqgl)|pf#3?-Af zk(U4cvA~YWZ|OGy8{?fO<$Ha2#&C>6r^J@bos70C9C5jYAS!?8j+4?70twjPFuLicZB zA5)h@o--=I#f*DCrSgU(f0-m1^JBR&E7-~uha6RqlbmX`@>U*tk;nN zMDX%MOS6)q;@f;#U(M)EkS| zOl~NPp-AglMyeMvzx}d_Sufb!#nsr(#A)=M=UW^*ps^+oC0}brM${oxdEevuZDGcw z9B#Km;*GJ3ZN2T>J8>k`X$l+f+|HuT8a)f!#SC9r;5~gy|0#_$Qw|Jd}K@u zB;r0eF75C>QFaLWU+h zzYoKXi@z3?;$UsP)iRHn9v!)R+*gBlr8C}^i|3P2FRj*_H~%fnX?q`Gq(#F%Ri9z4 z*B(8Z^sun<@;(-s=;Unhb=g%$yt{eimgh5dwf4BcZipK6>r;LMMH_*1hue2_jWTgQ zKFr&6dOww&ipP{xcWXs_M>FwuXtRUkWGS#rGjotns)>SSxvGxV6u4cUaZ$}uUZgni zyTbY)$56&lOD2xoVw{e5lVpx*6YUiVreA?b@W4G=s<<)D#Q08eEkGar`!(Qx;33mI z#{72e%)k z!n)uV;^UD}2W*5#^!H|9??p}J@eVT6RtVf5Bb{rR=n%7KSlaL5&u4O6!0uI-W8ErS zU1tUC)wIKS45-HEWefj&-CvBkWfXq6r>Vd= zcmGWp2f!AF#sZVWa;wfO^wmhtfM_D@SF(LL&cqg!LTwmNT-7wZ`O~p>u+_VxWksKQ zqh9iupEIyMrD@LmpzG`{Ek-gyYGN=ozrUFcip>55eW`O`hdZi&E`NwHUboo&I{;2m z*B;1XU*G0rYMS%X(LIU*2jT!@yhh;R| zrB;~AiPhzwFG1SaSZCH81Nk%ENj$PrF81PWid+@A4yb9&F>4Pmw%34bE&|SCpiFwe zHjGQz%la;G&Q-ZB?Opq>+cZ}XXu<-=jKfH6%mL7L!n3rMMi&=w%~dvS0(XpzGz&S> z6mmai3%2d%$tCmoQd5(PB2_59iZ=$-b2W4bX10JwXdII@BK|bP2lQ-EVTPI1v zn71L5=he2HpDxa8d`>S|CZCyWFE}!i(yw1uRYJ7C&!y0OOo-Py;p5>|9zyI!?HxR(hIMui2!s2$z z?Gb9y(NN@BgFSd5jDvvz69o8&_GT2!_L^6JV`-V=$QiO_OiUV)DrsYbp>VYP23Do( z{nn)fVZy^Uv$|EG(eOsw{>mDIz~2>+K1xqu88m5>7&}*=_Pj4-h$3v&?iNMmm`ak8 z?^jKYX?b}~Fm*WNtadm&6I@%~Co3wFxSQ+8rAr&=ct4+rnwu{fObGZK#w#&~EFVV4 zMDw^TFBsOhk#&oVgonEH@kqAI#z9S!OF@%2rP9G*xksP-ZC0YO1))>a>RM0DFy@B4 zP<*%hc^GxwW!`aY2c%HzbbKsoem(QKT2o>vO7|ngYP~hRmI@7nTeZF zHTireY^dBOnJhQCfcs|*XYaydZS$iJ13^HQo@D}Nl&7HY0~ULiIp2)ePdK>+xyv<1 zF2^elIDclQb;z=lEwI~W8RlH0BW4$Tf5t3QAP|Un>U>57E7P^__GFzAZZkQ0VfX@` zSqYNthX}!d=L2UmWMH!!uzO!x%M%Rb0 zG=4*$sFB2;q{8SH!V{2W_kl4MZ7j*?EiG>0{vsJ01XKm=Dcs6qf|k^vHpaasGRw#7 zl=59lc6H%QYi9y}3(~pgQ+DxnI+KX`;naz*Uo`asqekZu>nY`NHIw!gbFl2ir!xvS zqYe`7kE2&@;eGzm^xGlyAVT7l#mB@s(~>xa{okVPE7&1vu(00^} zzzVKk%q1^ap3L;G3dY{S&M!5sxNJ4~ehn7c#2GkhooB9^Km1BD&LJRV zvfN*WvxbrmGW^QRe`~CdXMK8keR8Wb8`&I%-p)QO@!5XN-JC5d%!lwfoYV4d%J-FD z3i45SW{#aw9}~JBlxB{nl0ZVu37qWts!fST5k}>|rK2>ZS1O{ESfNjbad+vijdkP5 z3w*P-E2>3nS5_Tj&K0=Ujy>S0`0j0l79cRUcgSjf*5u;=n&Y%1Cd!8rs+Q z@S|Lw@;$|cu)N>XJzI5y3(M;aV}Wg1)kYh(>ups*PqB)ADw9a(4_Inr#kx+b|* z+PvP;VG^872N&e=P54({UbEBuQCf6nquHz2MM=8x-*&aZ8}MgoK|zVB)+s& zpZebGnZ@6QX?4j+d*z;Te4df(4C*v>R2=$+p?uI;1QRV1q{279V_%VS8Uee$&8uQ) zBA5*ZrN|`elmlh#t3eP)JKXeDyUjPQ*%+sD6K8y$+V%auETK`0VY+fk1q81HRTo*7 zg>8OLw}au+vMs(@lmsXrL<=@EXv=sY)&eWc1pNCyq=TG7^O3@9OJ}Zh%$hk9unjy$ zY6AaMifB%PS0MA+F*e<3>HI~-;KPPRauL0`TF)$2l5H7FB>HotX5;&g7&sS{wTdCjWYW!q>F3T>K&U8JlyNXc zv0HeAtRxf4Z!*y1defa=OEgz&2n!NFYog^6`NM4nDL(I@{_hgYi{^6p?z1-q+!e7%*cQ4~n(_tuEB z)i>cga8KH6j`oA$aQrZj1ZX*jQ*)FhF~A@>hPpNb1*bmDX0j@eDcxazbOm^!O)rI@ z9h-IsDyw-mTDwA_sSxx2Ec2RY2Bq#OF?UMYi@CI39s@9_$9l@qglGC^W7u^r&Zq63irfPrqzrTPZ~)#K+pVo z#HORFr-!Y%*~fjo8l8PFNv!u!xt%7gHDR|HqsuD-9R!YU$aw zjU+c(-Lz;dP-1v$s_~fnmO&-fEN6Y%-pSm2IY@Kb+=De@&=i^^a ziM5T=Fkd;ZIs}?6bLKG++GF3rV^JNQb%?vqfVQe?v3=6YxGirk5|yxJ-q6=t22C}7 zmR^NE^T=tpXvd7%+J!<<1szr(f*qr>0tSrN`s(bkg6B<(;Uv$gCvL4>ZUwH!wlq45 zu_BW|i9rOj^XzzGQ6XA2Q^@oYSmBuKjJMyBuE6p#Q7b@fT@msaZG|WQg(hFhs5%E? zTNFmS6b$bl4m_FH!sY^Kmo>H%dpwp-0E**+Uo|0|b!qk1`B0XOi{QM|@@ANhnizut znghqe2(JTalaDDy+*4Ax2Rcf8cw2|shQm?5cz#h(d-D2Yp?xa@QW@<9WvIwqu%b<- zpxg>N<%xm(A3jIB+OrZ7P73mcP&mbmk*=3ed;G6(``?_TnZqjH0oRJkMm^#Da#HSE zs^pdP-}9cXa%iSQiMHT6T$2M{uN5jm`2MtXg2=~KSp7xucHuOf;^!@A9;Q2LwZATS zXuFJ7n3tJr-tum*rJn%KL|$q5?TLF?Lww@>7i#VKvqiF+f3p0%efMvCt6B`f`dA7< zir`I?rk^y-7 zjwr~XWDR?Mv+dtoxBQdb<|RD1A>7eYcVQ^gz_5y_=j#zplfCCS6*ImRS}JGFamZ-$ zXA0b7RZ6n`uIFH7_~7Z)fV@SI1ph*c{m}LLoNdo?VC=pNX{+xR5VPFc64oa43fq7y2gS|?YF z%HgQ@;ZyVGepg31%XU7A*$|A%dz#;an`DmEZ0*qcC5VdBa#9Sv@fWOnsV>_e!+dN! z2^WlU0j|TjIs;oUu8W|BmD{PXv-N#E3d6@P5991)0A{oizQXLUQn8z1rOmYhB*x)A zQ&6q$w`cvIG&(7Hig}A|!6@!0odW$_f~(Yo&0=6QG{~E>erF`kmy$u;++O#MJ}3I6 z{pc(U(~aAkxu89GBVuJM2uff#w7f@51w`pU7r}FAr`l$ok2E9GDz4Z$D=R&a27=>^ zi>Sd~&4D|I4`#0HPR)O@W*18^EdKMhf{YLR`rRt>xL|YQmBuezyEL{)|tvH`I z;~C72SN6?kzAQTYd$;Qz@BF&B59;Rqd7(COHyyVp#kf1^pM2wf<9EKS*+7P zg{tTCP(FpoeMEh`f?7<`{?y>>)e7n@J;I4m>*g#h2^nyh9{@(WVBxhS>H9kgQGadp zja&0_RRK`@jz&N(LiGumqV{<_?nl_oHY&wt08bIrkpV~P=Y=(o{Flc--Jj05#$MsZ zmuNeGZ*J)eq@IHzCkhp1h^j4-2kI~jD^V(W1^5D8&GPd717&ppD{)eA?BFrD?z`N^ zc^;dc1^>N0sus`+N{lv%v0ca$UgLAy;fhkbtu-EI(sBfq75 zj@Ft3qyu*n99h?=XA-K>@WB@j4;k__>qrZuo+`nz=c!qMSWCD!6&YQxE`d-`Cq>kP zFefzNeyJb$UN%(iTw+l+ga%AEM~Zgej`^!pYnCnXlrJQ?!sr)e5?M|GD;$ISMVW== zxnzmkA@1?pzE4JGt9S9I4CMA+#hbbLZ*-r3J*Tx{#L5LEP@3)ezYRJ!Y`GP93izD z5~WELbDhpX-*8&@P{T1Rxt_4m%z)9qx^OW_%{PM3yYD?(`4~A<^-$8q!%Z!h%u7#w zR%9IR^))FF6L;~l%C~T1sdZL%@}Qmf9M&Lbu-j;O;wWEQoUb&t>&Zx?_k2@FPK+;A zMTk^Pq8)06%_K;`!(HmEZEY>=*w~zFy4=t1%-X?|eIDqXvgU7yo3Ybi@=Fv1l>5bC z)EV{?k%zI2FTn9;IC;cC!2t8a+S|=G%9Q%Ds3a9>{}tnqXyG=^t6sKhntdEQOPutN zNk^Z~Q9Mr+>$c9%&5zTmMUC0b3K-{)qo_*u=wU>RaO)a7@*B2|8aaMkpr|e`Ze3gW z73OY+9PJkn>g8)ekK51qWmVHcwziOA`IHn~0Qbl`hqT?9%=y@{E5%B^lciLA-dkb3 zcmn+$ho$B0(=FACu6EZ^6!8lN&8#?*cz|dH!6QbS5h)g^w%Q( z4QGt#=>%U)U*fz$DZ2x8Qi`^`AVX-x@iLmtw?Wg;lP37;t>}0#?!q^XDl5&0N-35| zgLxCy{qe6Ac@*xUYIxKlq~v2<73>9n8ow)zdjCp~27X1nW2~2}33}aKmIzjDBP9#QkJj0M%^72Ceyx+^gsH_ zLQoS6di2d`YLjH;3m3mL;>5SEiT*O=DWQ=4g*O$m-In)OZcqNWS32}i0Z+W%%SH{E zcD)Z=m#P}{Lwa>S+BWwFR*kVvKMY@Gx`dq@@EtxBUA()6y9?eivRfOdt?D6Uw>R*j zKy-zATXLf}t^nTQ6EBaJ_Yg;1iyppd(49AG9H8GxH zefSu6L4`E)1^4b_2U@b>>!4RHT^AfzUJ3^*bgZ|ZdGD^^v**UEQ*B**Ac(M^G|LRz zFue!$-IFr}((zJ#(7iOfKL9FwOJEU6PLcxN_ zOruW}LNcHt&OeX@0>VBSH?^QCp2r1v|CXA4u3hs^hOIPN!o2%f%M6yzH`L#p)A!dn zv!P$EMf{1*6$IR1UVp@e_|)-M5QI*tm;}M z_#(MbP?4E^zOi`=a%WBxY_{}@`oX|qhtq1H8*OkBTH!C1oETRpup!bteNoZ_#P8V| z+3_Y3Xx|iCYHDh8OijiNXxkib=S`5;~PEHvoKl*5O9mm8}B3u)mMYcuRaS z+Nr@w<1pGy+3$jpP*+OR-%v|?|Ehcj2^h5dE^-9;7HU+$%=-&7#M283G?_pyr*L;j zfIs`;yfx4NwxoNG9@|c6$3+vgVD_D^Bhx`%0|mqm(YfTi?GMj0FSD{GC*H6LxB=fk zt|CK#uR4P~X-LJ%;Xf0#IU?I?rc^L4nWyq%mS_(~E{1Sl3hA;={HZp6{l%xK+Q2hq zCOn~lL#<9%Ii=J7+p0Tj@rb)x-dnb$d=~q&Z1LIQJn8*tk^0^Kah!CSLYyv-&P-dl z{zj*ms7vkFp*m*gKfRhv>OP4>=FWb4%`u+glWV!x`nJ1F|uiVVwfIDTy~tFz%IO6Ue>% zq1j=jeddDa13pMV&hVbc3sdFL{y{T!oejORc8m(kKJrG*;)}=&5O)insCXlXf}#p` z^+0r7w=o?=gbesQomVuD#|H{bic$~hKlq3WU_mknp1%!dNnpJXn)WuTeBu~ zyjB0VvtKD!%edqp&W0`zR)*X)O*tezkSI%!hkL85k5g{mg63c1!xfM91!C9^LVtD{ zDHr7+90jMkLNvN_*UYYX4@p0ezXB$XU-%Yfn0*F5(F_lNYaI)ugwm0}!Qt=#NA{ua zWv@=P#UAP>HK;d3`O}ku9v9!I|2vT9Ddj=0xyFthNjkoxM+%%N#MMN6Yrh>}hTqy0{STR}~$LLL?;FK9*1#Qk70dB~RL5ymkH4 zBQkiNR1W=Tk4`IUOXd`#hlTgjLz=;t00-elgrRL@#sdzF2nziy4h$ArTDBnUWF)P^ zBa^)B-2uh@<_{Il~COPF$PVn`;L()I)ac z(Pf{fn*o00>0kMtml@{zLD$0*^f?fa1;;9Z_`oy5xh!}r#r9f3phOpfL`cuaGJ_Uv zs4V3bSt3Hus>TXOVJqnFFP~9U&~{ zmn-`2Wq2PSu(y4%Y8MS1W@?a07uZ7z#;;jvD7z+W4WW5g-aAo6)XaL3Fo?qNO>F(i zP*`~cmes_sRNYBr$-|$rfiL3AJq=Fn&phUV#8G>-F>jNmE~r)2pTDbSpH0J0GhQP982Xe1Eukv6BW8-Ak0ADqRkv`4&04*wDZZCrZ3H z0JoZWrLRVJG2|)q6*n!7Ry#>GRLrjWq9gHF+3V5#VKX=Taid#GPH^xl&0#oGTjI_k zE!P|`X;m5qx039H4?O^W&%uNLtkaH)n=wb0M;Y#UO<*xc3jeMRcSqMsa!xO#B?Swj zA^Dq^*yyN+k+43QYDYGiMFRc?%jX;V{s(abGJJ13NOJqPi?tWvb~24|g9^-~)y4Zh z%c0xjstb@DslyP<`)p=tnag86y~iwRu;Hz(~_^?O`X|7+UQFEjd<*#v~$*fQTdkW<4HV}x^ET?XiU_&hTr zUAs?kKgI|3{0Qk@xN1hy4B?2-L2bTbvSjk!48eG50CjKTr&gl<#(FpO)S5?ceL}sb zogU+{vEX!J)js$@n53T6`AcWUo5J#4Uz~FP^;|MgirXPLbKSmYIODMIcb9+l`(jw$ zWRS&?)pQ(fAmju*PflqE%> zW2&y^Lr97YS#)a2@lRT40RNS5!5)w@R=CQNMvy6f{XT!5{(_qCQVh1i(Y= z1Up~UAu{{1-`&8gk#Ek`q^m`yE`~BVal5!w@}N&NMQkU~oVOb5H==MMg4i}GDNzsN zCwU@nTnAB?AJ*B5ui!?063Ck~#a78$AT!rOUOu9Mltaw-`vLL|)v;535JT!5rBUBIk_0_c(mu8MJ?yVX0naZ8o+d|D-&6?7< z)HA_rAc?c_^Pat-Xa~95QSnRl^q`>BCAagYw_(er2MfE&oDGijrq)`Pq|@nV3kBLe zW$d|4zdWn$X^ryiqPD;Acp-kCqkNA457H(KMIWBeSkBFR=p9?R=crl;G(X^ ziuS8Jxt(h~NuHaYPq%IgIYC;d1%*OCk#y7IAmugFk^q_Zlj0EVw-XazfnW^dK>1+| z6MymIRO4W^BMQbD;0T(!N$847c`~u3vfBUID+lAeYLEk>eHShm&2bc{P~Le2XOelJ z?9zD*g06WNC#z{UWzv0ct9kiJlf)>JNic_vrVzEFkt zST6gCHJcmEQi&L4F14RNTUg9eg*jy|Lpo(45TX9BUb(THH7VlRrDr_JzV)=a1Jz|< z)3Ig4%4LMtF=oTyd63ts;v4H}zt_=m5CG`=8-VcN-v917HPqGJG4KT<1OL^N;)e+M*{+)R^IlJ-Xh>-;qXsX- zq8kj@#?i3$l`kqI`)@K7!4EMT$YBMx!NTrxO)?xI8DwH9EcD6^#qCG(I`Q^{6T46e z9EwyWsEQjY6|xjlrnT2s@sWgvKr5A&6R{%54+?6$_L(a^UwE51M3VbzH6d69eXSl} zG(4;Sta@2H#~CCe;x1J5)W7CuWFl!3oDmH!lKYp2UNkto9bkd@e(M*fH@4Wr-PUrd z_9?_fnxb=0=VR6A16_Ug*>Q0Gk7PTZnTb~A@c0h(LdL^?Q8f#@u8aKUISzF?e|zSK7o1Ai1siIjY?va>w-ps}6G zL=nFmzTv4boPm2(D#>t^aX(rp%H!u>tda5_6>`VO3#-XK)pqB+#g!OND%)Ev;)n<+ zwzVaWQq+r8;;v6;%r$p%4WB_;7JjWmTGj;RM{rbE8|q$zoQQAPn44!B_ntDW-IOyo zbBn?Y?Z9>R(6vFtHfdLRj1rKtaOe{)?j=-JNQRQNGN;;Nh&za88dbV%fo6`#7{;@m za}K#gLIAf>j-)8QiH@(Ako-6V%zjhKYzz2D!EQINW^&53lghRXm@YHv9z49ULcF029f;U4Ge^j--LaHg$_bBSUJpE3?YXGaJKsGfdKly7V#oxzz^h6ByTBVq(z^z?n zpo_a1NsdG_0QF-9H!JjI?>@p+_#wxZFK~$@H^^4y8a16VFSb%%h1WORz;8_CD zX2H3Bm#7CO0TB!Kube9{AJ~nRq-RozPcjek2u|W7-orA=?$L&o=^b?aBn)N`PWT4uVji_)Khz#Y#EYV$0mzSc@@}zxyoEma_UJ?8S#SAa zD*meS0#%fR_VAE?p)c(wtycLoh|Rdk^v%2EY%ZSd>fK1*g5XDWeBeF#l5gWa>`I_*Gh!R9B89vv^PozTnTLB|H+A zr;xrF+UTo%wT`il$&CTRb54>i_N=ik80 zpOWFZEtvT&W*ru@a+sZinFnU)VCI3D2WB3adA4BI3$tFBd0^HHGY^(}Vb%+?UYJ$! z1+>;H!&G({eO9RKu8i<0F^vI1=rAt64b}zbfd(2e>5##p+_uW zHHpgl+CtaNf7LdK%i+ZM3+ihN%3=$*Z*xA*$m#db9j#8*^6fvo}b>(@4ml9znfd{cX5=wh>{mAB`>1nkFj3GyX+R$cVpeOyp5d2 zc(2_eZ!z)~BX2R39Vc%w@)jd+G2PpP>OJyyoV>k9-rhvzarx5vDRRQ~Kk4t~c-~K* zJ#hEJ{eb!*tP;dK35z$jRJxP3AsB_#%fuUp$s4kpd@oZ)*U9;EO4ogNz3Y1D;a>G2 z9ujzX8xJE=&9`6;s0DSv2mI7#GjEv|(8_%qV>@F9V?gcFT{r}%Fg?GUx6&SBpR~?u zS~;D33!1&F zfYE7m!=eHf6|i_678S6lfJMa8VG$h`(P0rC7GdE0Xmr9L|(~3gM2(E@SL!|x)OLE$3qnB=9g4Z?>?k^S(LBW`Ypfe zmRL0=JzQt%6@I>H&6%(|Ld<9NlO3ozg_={SIfa^2C^^MSQ^6_Jo5Ie#_LR=-Ap38# ze}etJXgU`)R*WO-F{#W0re*OphciyY{DB?pAABy-;#HY3MG5V>Y zR>pP^P`^Z(qhxZPi08?qsnUejG-J!i(>G~v$6`P$nZeZ_=ff%B};Pj07hmK?I|mj091PaxxNlJ*$0m6HOMo$Jjl_ z?lE?cv3raiW2_$2tIV7?;JpFw4R~+BdjsAZ(C%6C`oI4_<}Ny~kdM3T|I64>GL1h$ zodW)=b@GNzr*3*=_dfwV#Vla}c-muNWME+6V$fmGV_-_IEXrZv%SkNBV~}8A0g5yH P{|_V(EFb^?vO@>^k62-U literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.eot b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.eot new file mode 100755 index 0000000000000000000000000000000000000000..e28f6db55e898dd8a1d9ead5318f7528ec9286c4 GIT binary patch literal 8888 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 JAO6eX{{!P-6bb+U literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.svg b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.svg new file mode 100755 index 000000000..1e12b5f6a --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.svg @@ -0,0 +1,38 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.ttf b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.ttf new file mode 100755 index 0000000000000000000000000000000000000000..3d062dcf264462eae98dbe9565560187362e7f5c GIT binary patch literal 8732 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 DNS*~X literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.woff b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.woff new file mode 100755 index 0000000000000000000000000000000000000000..ef1e9c2c434f786a409d2e3ac47a5035872e98e7 GIT binary patch literal 8808 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 b$ejqMF;>UORRG?q5=PhE&nt)jo%sI(Ce#aG literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/android-icon-192x192.png b/luci-theme-argon/htdocs/luci-static/argon/icon/android-icon-192x192.png new file mode 100755 index 0000000000000000000000000000000000000000..7c17009d3d83e8d0aedf334165c8fcdf95df501b GIT binary patch literal 6411 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 literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-144x144.png b/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-144x144.png new file mode 100755 index 0000000000000000000000000000000000000000..5308d66b779b26d1828690516a4ab5dc01b7cec9 GIT binary patch literal 5222 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 aWS&p(fIu!(CjkFLSj>$d8r2y%$NwKzaNBSI literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-60x60.png b/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-60x60.png new file mode 100755 index 0000000000000000000000000000000000000000..f18dfa49cd35fa6d5cb882ea8ae703c852e313df GIT binary patch literal 2561 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 literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-72x72.png b/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-72x72.png new file mode 100755 index 0000000000000000000000000000000000000000..bb3e2423331068c72c5ad0e1bc49a51e1fdd71af GIT binary patch literal 2877 zcmYjSc{tSD8=r0}vX+WuN!ij(L|36)A(HGRB#dS3W{feIF_y*{)QDuu_ERKVCP@?$ zB}*himadx^%Ph>8efxcTe*gT=bIyCt`8?12p3nO^?|Dv^i<6z~UX{Hd5J>ily^R|% z+y5StI{^zewnhMx1jOo^6$nJkl@bi=&4v0EVJB1CblC z89e_uQdAlfl0*$oB*$e6pm#V3ya*h><_BMnNoU1pi^DPWkR(b(3Ox|H9-h4Q+hXWI zhh=bqemnM8Sn?)-0}Euf_;&0v;P}6Fe3l46klDX&L<%D^l>r2aOkn_92#O{aivh=| z)a`K0Rw$YV;6P;P9X2?A6@sG1W^jR+(P_*G3?1--VmSc_QXp~-pyVI70>g3uN&sOP zmIucP5O^WLJUX2fo52r5Zw4i-$J}8DC2T;FC}C(Ca5O+EJb4q~6Ou>{PS^-V(Lzzw z$W$gkDKLHwNES#WDvcF{Tn8goMIvzkVik_#0h$2%1jLcTF${rF3emkLMBVhV2YMVLV-Z+2VVilugBp9TMRLqBOadySaBw2g(1J?rIKmCr3g>n z{{BN4il+1UVxdrcx0DWumQl!wPG@%y@E4bbs~f_I6eev;H1bt|y2piKw`0;73qJ)> zY3#;!AYV@Zh+uGB2x$1clMP00)V^Scq5-Y8!jkFj?>H}egs6LhgsknAHPP5NVPp#P zO+T-whSl(jgSpQyuNS1{^QxPfkty_bvWUYK|J?v-&rjq%|b4B{I> zX`QgJhTqg7#6AQ9ZX&Zb8{3)T=#Bg;I<9cDs*w?#u--c;>K)=`77KDK1sDQ=P@bU) zQ@|VeGtSM)9rXVHTi;Ie_qtP|9Q9D$soJzOb55=LbZr_(eY!8Lc8WiDdRYnt+Vl8| zjg`mEzNVSPn~D$>(59=8&nbtkS8P_x0ON#&2j1JK&3m8z2JvU}Ou_6EZ>(11n-Im8 zyrWVlur2s`Nj>&)S-hm=AF)ZUP2{9hyWXAsHz-|E$nP;{j7yMmll8R9!C!30?zf(} zqo1Ja#?(aJGwQH@#WQQ=^Vs4t$}IvBprNC!?Q36uZTZ&?n+#PmEs63r%a?r(ODKd{?T@Z5)Y8AG z(sQdLYPJ?T___REWoXoPui=cTfqFLX#Af0isGj6DQE|~F$`S|TJI|iD|Llc8j#qXC zLY0(B>+akyVs%{QCO6JW7{ANus_eL^{D;%fb*Rj%%J&?hVUv^lO0vpX8CFZp-NqouQt3Kng0xwwO%WQ7@@ z-AVs~*1{Z@&ebeK^?b#;&=9aB)v_~g=4dcQe08T&&Tf`Za@)Rh%1L)y?bfmb>>hp~ zc^%fJdY^>EnL<_f|0D-?(!4ub4W}Kvltxmr4EAp`6*aarXg6V=

l43o znrK}nG+gtc>gLx>3i3^0x2Jw8raK+QC7@P3yP)0$WkXdfo&(SJ7avZx7?9gye*=Fh z7^#U3mveCVTs5L%k>I3&;}DR@Gbl&OjgX3u6tH~ViyWGN=xhHJmXqb75p?YjBWI!7 zXQOk-o;;ew1%hU;dPQNyb1>nPku#Dsp8165-LI*cm;3`hb@pts4Q9lGd3wP*%H&|w z#Y>P2Qdtzn;Zr^Nrr-KTgP$9mN;J=My)3^EvJclURe zzxaz!|C)L*;B4u@+V+tfo@4yjLty;pzP;DbiSEZ!{C2@hNG7H+L8>yc0aV=!#xqsf_rp|b*a?=O zdkVxzBZ`Xxvy1NF!Of&k>bbv|?No7}*&6tlNnM-BoI~GLkBVxAjG^a7Bjs-?yuPT{ zaCZ9d049+>}fFM zCuM`!K6?G2=tfO`8%FKLCo0w-FIs3?#=UL&dYAFn92b2cl7NrqHomX5^lw6=lPxZ;uW0c%Ty}83g+jQYV9D~#HHw~lDUs=oH8a=Hj`uh= z!BzHhEOD6gYOc$2dw7sCJ#_5-L+xxIh_vkW9Hl+35F2w2p`x1c-S~PyU#40vro1qf z*QDd|-L1B<&Pe-a=&Hu+2vT?+eYlk`b3I7pU$^P^vQ=OUo=@of5wksfpx*xpfoHPg z!}gpIjQ$ldh4xh7F>6ZzF;idtxrrv>4EFQ(l?hCGu#Ysm{Jp zXJe*zQIKhfkM@M2hi6x1BfELj=@yOO&>qu%Go-mBjM(Vo_eJ%p|Htkl^Wku3@3Zi>ZKo#XAY5CTVcnVy;=;QYF>U;ju%hgvOoXWk7$Wk8E$eH zKVY6^yFDE_AM>65v32|SDW&Lg9*xEG9bJW#WJW69eso4uvF_WS$dy0c_5LCYUSYC@ zDDu<@1|K+ld`9`>$0d)uPr%!slyse{)ip#KSRIf?hg$kD@Xdp+*gDxXU-D1?FEo)L Ao&W#< literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/arrow.svg b/luci-theme-argon/htdocs/luci-static/argon/icon/arrow.svg new file mode 100755 index 000000000..ebeca958b --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/icon/arrow.svg @@ -0,0 +1 @@ + diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/browserconfig.xml b/luci-theme-argon/htdocs/luci-static/argon/icon/browserconfig.xml new file mode 100755 index 000000000..c55414822 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/icon/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png b/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png new file mode 100755 index 0000000000000000000000000000000000000000..308843a09261dc8c5d95f01a3b4e6592e1a83ff0 GIT binary patch literal 1019 zcmYjPZA?>F7%m{esh!A-!^JHA*pg+#4Kg=B77Q?$Vz8?~bWQ{jffndDrIdbu0R=XP z11r(dI_p9e$m%Fy{9@6~jqx?GX2J%GqooB}+TMG6Z|}WrcgX(i+z zH-!@W2|cecr$peWlz3~KNWKm)7q6Cy+!YO;v$f7r;nKM}m#{g^kgjpH7+Zyu2%KOR z^A|blAWs+KYS3y$phgL?lrU53tCIPvBFLyh^QqB zp!hn1rwuWrKBmmiR>2&AAP?}g!5RfrE%z(hgVAUdLL$|2-+$c!AVabS$bd!_;^k7I zneR#zfNJmp9wp$xI_Y%H21TEQ6n z{{bO6pd5o>WNbYFDM%m~hQPHk7#tSwwG4ufnVg%QS(rRS{W0!bTt*^gF6L6?*Cm|-b1U0nRE^CfzId}s4<`)Ep~X*+8mK5=^U z?c)nQG;>eJ&fHTc{w}(_pszT2;sE|~N7tnz2~Ym?#+aYa(eoH|%fX2x-KtTj5AWKE0PyqoI5JeG0peUA|1PE)^x8^aI{xSFS?z!i_&$++%edpYh=I`gT z)$*^F5Cm=YJ>nSvR>zHLVGgWknW7skn}QGj`!EFE&a@)vo59|U7vS?HRNH62072%E z|M8Pv^yqmSUlk-+WW+3R64%1T`f!PX9ly*=!6T(GQ=n$WEd?j61oBkp5?A?hB1(ou z{)hmn=u}fo8p%zDgJKuYM$HEDl;Ai|j&p=-Awo?^k~Sns6PlzIDAq$o8x{ngjZ*&k z%!Y|{0tE?P0t@{0^>rW);(@~X9}#-=98dr}00yXm;{XGE1*id3M$9}@umGse%TPeb zh@L-}uo5N1BP2#31>mD(C_8@jPiAFAvXPfU091DT3OjBoNT3dmU*^kA5y>!DiVVIY zBBdxRZY4~tm8+3B%VVm-NB$ zi#Wb+FarMN=u{)fL*hl95hnA?(f(nO1Wl|0Y3W4oJOF7#21bZbk-m43sBZeL532UNk z10zPAQ>q;u$5d)lQ0!85BXX-5zFdJsO4oAB;G9y!IZ#B2p|KqWC8%#j3M$cr41-or zcJ<<8(=V*F;4v40o~7cURL#%AV-y1T}z2KZ9(TGq8SjgHJN(M3uP zoW$k!Zum-tuD02Dx67D&UGww>+R_O>eSzea>03ID;o{XWktY6vo-apUPZGk5`f#x> zLZZnp19jBKq#EMWwfq!qK_!uP#nAQ;%P+@8*+gwKUQ`7aRv`%&^ieWh&2QM^GFjPx z7uT8oWN5IxULJ{96UEQHIwsG9^HmPJMoQ1-%$VYr~JCle{+NH z)YUZ_tSr_dhlYpueRe6ANw@y5S8j2#)2$o-sCn!taXR$ii}&4MyB!>V>+f7nMc;j^ z{MC@+*oBTV-?_f8TbH)w21CBAHdfSrL{5|HM>`CnH7k6!IkV%M%{Bdad*-hw) z4`rvg!T&j_MExY{ND3Qg>LaS~%3H(%$?>RT>4B{(ub2(Wt@e}e@g9)8*R8wuIPB@Y|Hjb0_NuDiU7VXKPOCeE zxZ6LSh~RZS`D|Qr&|@=(ePS7WU`w3w9N95f?jHEz*}CwV!Hmp(;qi6!#>~u23uzf= zz?Ai_Yr#>qb4~l+Gbd0XUO1AT7k0)l*^`$mIq3G@mKWaMY~J<4apCEAOxM4_e17=P z*rTmgXOct-t8GF<%jLIO)Lq}U#ko$@27Y&j6rp{t#p^4hCJtOHI<$^#s(sb6*ZZq9 ziI?BF%RimV8INw2JywU{llA^3c+s1Z6{}y;240+`Su;)yu~{q@leuH3a@N+?*4lb< lGHZJ7Ejv4#6Q>w96o|L|_<|kZ-V<~f5Hhw+K_EB7|SrmzHiyeT8b=%B2;8a zB3lVrvhRa2GiE4VI8bOoTa5g4r z-7}2o6T?U27MugtobW3TBRTfIOSmYWN9g8*5Sj~t;ukBpAGijM|G(Yyo`+ml!iE!` z?1*3a&xNp%`Ne^*!IXcKsrS6+Aj8Lj|Ji?I*Wir@!GA)~J( z=DQLo5IYEhP$f_l!v0$r6(WTe!G^OQMzGyNXb{}qchNau73#=4lH*BYc!e?ll;=-| z;6BlO2frmdp9Pnob!-I3J(TVn!*|3lKaAjdg|pDOd8kK6zhw^+!@+L_>fJk%>lwy! z@Lh89U%>>f{iz{f)jNudi{d)_lkI#KU4kgMXr5;n!-KTx6~=xT!NCNsL+U}&xrZ_Z zAm|g#^Nj%j0FnaIjm{T<5XB}F42);^L<4h6eEKGc38X-6E|CS0_zr$#NCXxe!~|{d zcu+Fybv?^BdUJA)zrF#EPxHB4aDygTSQZ2(usgr=hsOc$h|QS=K9dDL& zTof}n8B&rJ5Kkqq^IZwh=i~PL6aaj%p^fJi#!Y+5$uH*=R%|*4tcN6RxCBuH;&~Ny zz{5yhO%srm58$F$q%@Y3|C(Luu z-6xvk?7#A*2ilqJ2Sj>$5#KwC?MB=j)Hdsd&cJz}8)lZUvj4k;%gPQWsnzggfymOc zHpzXr&n62}+G^C)YGh@3w3*1rnLgUg4D}$judR*WU^6(p34@6}F)`G?=`vCKB;byv zm2}6z(5n+C)_Fr_tl&HjVO>LMOe2Z>(y}yMZ>+i|CT(xo0ZxkK3)utuih4>sNk5Sf zUzz!QS>yD2~%Wu_+iz{cc=t z50D4UhuhdQ+l`Uhc+XJk2nP7n{OjY$Y_f`=!Si>VRaV8FuPOc3o7Hw^9Q6*OX98Tx7?O0#&thq)8{Ufc>bDjj6zn^z^(W^04;# zq+~DW(~q=#?*Oyg@DpBZ4^o}y=bbxk-rJ~q3jDSZ_YulVeBle6a{Tk38O4`=UKNJ5 zTftp}4Ij9=v5pF|fmi2+-U9O4>-a`?J|i6jw7=Zvn$@W-Dh8J-UmKNl1|t)8guF-AsnU+ z67$3~k}T3~a5M&dACPIG@mi#Dp>TSNQjDl)Yue@R!u3o<betDHk8TS=T5PQ4=Z+ktHVsoA!4}wQd<4(U*KgYtyDI;b)1yZaM<@H=eo^#BXYy8>&2l^7*m&#m0u448C@Fr6ZOOMU_2#abdfhkD6HZJn*c zSkUrLOfAce;75FRw8IaV;*Xp?C^Y^_{$pI;%;t82A6V4+<=tClN8~J7SVpj6ca)Bd zy;9GYx>XI|pYVg@X=e5=9X3GRpQQK6zsn41>&qAsvqc7I$^%{ACrPq`Y*#vEsP#$ro z(3y~$zqjpaW(Nv=A?T~6Zp#9ZUDd%)#*DwI&yW$>^s8c-PJ=oUYQ*En^6beI&75@D z8HICQ8dtr2QCURkVtdTr$4S+?=Y5ZS>8|Xde^OQxscZK)if8G+>#V8= z9$9uz7ZlC^I!yDRePQ3b49iiFr`T^Nj|F7^Mu9g;I&o-Y_!ndNXToTrR!#19XLn#} zRr%wK!G3x?+sy~w&B1TEm7o_|k<(Kkku{ZA8ZkviRB=YB$2@~BUL665Cp~)|{+7h* z9t!QF01mBwgI3mVRgAr!>qjcA3gvo@;d6W#C_7zlux(EEJX)nsdAw0EbIua}nZMF284mM&xXD$6SR>P0HDe9_8i`)R2y1`whJu^$lgi%v{XkL7^mG-JAH^soh8sQ+hmJvB)awR4bwiI-wOT zFK5o}&B+w)YX!+%@8!O}o=GE7>^Q}h=B$|jt-Qy}MpF6EIN?etU0{JLZB5REa|v@E zSHi$N`Z&;N=|9l@+kEu%Kg(`r_I{^=b-ks@Iw7Iw+lDf8Kn8MR_C5s_Jl7dwb5|^z zZZ#=YCQ#{(Xm||mYC5Z&xijl6Agm#b(p>z2$VR*(&fc}96O=WE_^+_!LRD*0A70co zt~Kq0pXa*;P9RBh-750dOpPodWJk9M&Y={PK_Agz@;y$SD|l^cw~R&*6(nVH%zKCH zKh4Y>6iTQ(7i@EKXVVy)O*DolaHsm^vi#1W=`Y!rLt7|4wD{DYR*XB`3^KjysfR+I zgmC^-`nH2UzXe~z(H;0kxqP4d>WN-|^;3tBmN#3Ksou^&{wx`>6^%4FZW)Xn%2P+W z1m}+DuCAs;4QHNk8}bimXvN}DL1yq)*6&kP2Am7zt7U|3>XShgxmrbEf46tm`RZ0T zSaK8jG+A>@UoA;q-oCcBs(xf^R3xA6X#MMAWz?t!E4nsA{Iz(kc+i;V)#gre>|p^D zlNxGIv{@8#U3NW-Ml-h^tG;k2<7C>s(=~FsL}N!oLq}r+gSV}yyDvn{aoUqI$o-kS zuKO?A>oYQ{6w+=!?lfts+ubH*GgV$+-S@Qwk-#Hbi?68jn#G^rY@_9hkA++oSyHf> z*U5g(pbuQ~@$Yy*Qqe=qw2hCFlxGv9UnXURHkA($%NY z#rODxc(oEm1f2J=V9SmCdC5_}d8G|T8aRIIfKciw$1|8zE zza(&Z)*^994J#0P^oaE9@b&Y zmTg4YbiQpLnM__mgay8J%e~Gw5vh139?n=K*iEVXk(OYUw+Af77Q~XhXeb0j`~*ul@@0p}6~GV=1KBj(DAOusWfFm2HrWDYb6e3_d6T1GbN^Z``jJh5mJ6CPrq4uMOEzR)PSXKM0$&bg`LIX{v%_+=^b_86uRLB+xLvz z3qq0uJp*^WqI0MaFVGcf)*B$4V3KMaT?I)$zS0bwY*J9Nh*ayJM` z3QnN-B95NLAA7>~0OemDN%~I#WI!wd7;=r+atv8_3|WJuG64mUfYT3g1bF_71U$gw zAA<)>zzJjoOhEUD-1#rwC;HF_e&`O_@sA}0CsF{k!HHBRlj#jV0EU1pz+AtWBj0G8 zF9HXk@`~CAzym1&Qo#viARRyoSiw1L!!=?vB#{Du2LQW4w!%?#|5!Xg$2)32D1jW7 zd;*XKNC9L+lTHA>Kpg=5KvDpeJ7n7(x(yKYg6)MSQ9UDfJ)k>&F?hF#t*~U8a~L)- zp2%P_UBfqlx`iase4`J;P$xd{1E9#>QHKC{pnA{Z$pC&jgXsy|1=#t;90N4xmQRQz z=EfHN>}L{LFoBOi%6mG9xyg{ z=wE-(fvxm}?dO(Lf)ntm`NZu##_~EnA)ERvo^pt1x*2XaTXuy+icq7l&?;9oLARwjMG({iJ`CQBXk+N}#e z)It7xd}T8!Add90ogRcdj(bI#nxi$elZSuPLlRF=c_+{m;Fui+#2rUIKM73+&IU0E zNqJF#3ydQLC(?qDhkTt6 zzZUslCoO8yJnz6I!AZ%mKWILfZ`M8#4I-J$9wM>|$@>)T)kEmKFQS!1TZZ$qun2uJ zHv&C^&JNE-J{6rh#}ec_d&#F@{JoEqs78uS^YAZ?hAAg0_RGl;_76k^8h!37T$&O7 zZEaJOu>X^--DUoZQj~spE^T_4Z7}D2iFk9r(g!&k9%oC1GpiHFU-M_877A>?uac6d zOqT`=H1P{GI^w<=3al+mZ7LURTXnn-XFuoUkyd}BS4FIrFZu$h z6z*Cv8Lfz*MnmSl3*o=6h%LK-Rp8=1lwV`(8N*RbNFBMa-T^mq=inqYRgZxaj3Eo8 z1^j8HGe}*WXV_O?Xf8~5M$^B( zoFOTM|Mo5Cy7Q8svB)AL2NB`MafSu{t zPO)o;nOD?%E$m4bSG4#|>EhCIH%&h+vK!r-vkAbl4+eHA-a1asX!kreSfre^+v~(! z2K)Py4XE+gxwxG>0~;9`J@M|x$h0H1&n#DW>qNMrzsYq!>t<(kP)6TN9T}ZKE&JK= zb<9X8x&LLCgH&DDsG60nqoeJwke*v`pT1JVf;vA&CT??TzNDlNd$>%3`Jc~9=dHXu z_EIHl9b)!qjJIzM6+qtR&!56Z{$%GH6A@{8_o3XyKrt70VsL57N761SSxvqE+bSz3 zHYMeASSd(Z5sH#qn;6Ksn%^FO+y(+gy0!}1XjErP&XzUWpy!3pm6;kL<8i&cgtR9Y zv`@=7JUV4+%Do8ve!SsZgrwfjp2W#JPL6P@0k%oa@Y zZ+|SGgNx^T`{ihGzEG!AE&>yTEEEgt&nCj_WO%+nWNa`I1r9&j(=#W;lW)U1K>p}} zKPo8Rg>X*GBF$dx8jh_Y9TRolY9Tzi&J~q~r5v>B*R0|fQ0Wl%((2vy&_kZ5a>tZV zHyIfW#}Cx}DqBO;b+brK@h=@_5rP7)U5fz|9a8DaUZT~C=^PDF+kPl1?lWiYMGN{k zU2RqBlsr1LcntimyW>XXT8Y(a*_w*-5;}b=@*q;fo~FNThgPbUoBYD6fC22f7V0zG znd7F0C*V1Hpb)IH=GaH3P5|NJ5P26~#03NqC3lzHA4o>M?MX@2c8V1U%LrEE zzjJ@$yFpqq*YXH*Jx@TRw4m96s1sv+Aldj}`vwGLCo*Cf7liFWOAeh~KrH)uE>Xfr znZMI1*T;(tn!VUL4Kl!|HqK^gp7K&F&ZT&%+B=w+3+=Epuz2v}D7}WLj!+X4Phn^elf^ zjdNR1rMbXwT^N%y>fG<={A)WhDqBZ(;!gt9yZY$(owf!~ww`tx?27NU`V8L9vIvz7 zpXDt}W|P;M@;#&erO>`JP!vbMJ*1G($7!%;6Q$fH(YsB7sIHW%{!%i4PO^?_?i;Qb zXN;?Z@BI^;Vz2vqbO`>={CULW?nvQoOu_5pDR3pJzsNd*4lnF%#vJ%kf# zH0AYYw;wM`_hleQ`J{XY@71niJ0e*~tzMpO^M>92yIG|1ZC);=n+c1+jZawO?(kEa_d&pK9zg+v@mxWH^AS&0sNUCQToe`5m1K%d zpuzy?g|Az}D~~S8&J6d6$om^fC+^k)6L_gIjf~EB=1I3h^B_%AkOaQo&xVhQ5(9=v z3pz{k(OQN4ip3)38RzypDLs=&$Mc|mMuOq3@t%p09L&a5SdTWLydP?R?GMDP{ zy^bKxY?@iYt_NOR^2l=W!J@_he)f}(P*sfEqonH&H9d~?MIPK1=5^+4-0p)dgvH&UC;uY0Z4bt|cEPeL$SfOOevMuYXw9yBafft7WS)wPDs8I3 z?pj_{cdD$c7^E=FR$(YF7s z4F2A+t}lO5?g|zZN-&6R^oQer)N#7TzOvcmjM%2SRvS;YQ4VJ2)is4 z#k|r5dEH?3@baHT1`+h@6n@!MjZ0DJIq+fM{IDKl+Z(oVueP73#^#cJ{^8aD>uDL` zFtJ>QV`sj(yP7A*BzIQPrAuI0u?+6s*$e@r%AuQ{OlnDqdeET4@}_x6+--ssUf@Ah ztY><}d+Ju&WQ=fS6<1s2Q@KDoW-lADy#l-(}$6S8uY?Gd#1Guq|HAGxz{0&|;3?I=KLPPmPA2Cm$$P{!F1z7l0cxZ^uRrovC)aTe2c{pxRNtcBFhxtWlHiQ|gQ0JBTWDEx1NRm{@o z-tN<=>u4$moKdBpA=V$In`JEGV2N%r;5SLFuMtcXv%$njr@Z(Y(A)v1Ze4s`AT6 z>$UbONT*n=IIrX%d}800(F{m%38aYNlWoXkpj^+L?MaK=FB z*IZ=<=O5CW$2}wF5-PPywxe>Z<+rTl9)L8p8>-q#dv{Ko)YYxA;Lc@qs!B zZyH-GcdesdRkZu>>M?OrvYP!~(FYU%fWy-Lu^Gw@w|6rf_qi5h!qp>>M#tCjW3{>FLY5H1%6B)hp5I;=>{@`V z>{2PHllG!tfi34$WwAa@$zf zF6N6wkl+ytsnqc(NMC9Az5dpu8-Z$!WC$})m` zZ^04qDi6xaKHSrv24k&CjQE-%bSmiRM*i6Sbv9kCmhc^Omb=$Jo7I1)Z_{VU@YoUf znRvCCJ;ez0Rpp@@-_nw6wl2QpcP}&P=V90`luc>c)lRN{W|Tw+l=VIe*>Gt5&8}VS zAm^(S9>=C#U-v|`@ygt@m?zVY9G#%IqRQu9oQA%;`@%r@g3_Pj8g8eiu&1N>oKlxw zX+Al3y3bk8J9f9m3Q`=4H*;KJ{k3yP0H(UIh~KuZHZb^hLaI(II(wvAs`gS3uI%G0 zrUPE^$kG1#CiZ`{HUxLaH~T)9S58~3=gRbXne3Xn8KdZAk~X+-k3Th84oaPREsZ(G zpZIxr_pf}wauZ}FZ=zp|z=d?d@!eDv`K2bXkYeol^2X{Oi@W@uN~6@T1fGi*PMSDs zbd|Jt=YtYQ(IH62+JbC)&+|;!$3YB!cmBDd!PzA4ee8?jFcB8ZSq`0Xo^qj}826%- zKU(uK@ej4~xM(6iqo(6LbP?r>nWe6s_ree36;T(sp$ra?u;6BPr6lxbimDTaTQ5eq z)APLYA^gmr+09YZch`F_8;YLZm#;9aF8X-6NIfX#_I%9K>YoEufs-V~y1|yoi3!`D zr>)f!v->LDh}DxklXue7u+K)dTI%5vyEa)|6WecAqqJ!+Dyt-0>;i~H_{Udp+uvgo zaoBS~@Mr(KELyuqpuFZ-AG&Pk#X&%Xe{uRXGY@&At%5x!6(7VzMlU|D_Lv&jT%-Q2+nJOabr`H^&C$s? aWS&p(fIu!(CjkFLSj>$d8r2y%$NwKzaNBSI literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/spinner.svg b/luci-theme-argon/htdocs/luci-static/argon/icon/spinner.svg new file mode 100755 index 000000000..6ddd3b3ed --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/icon/spinner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/argon.svg b/luci-theme-argon/htdocs/luci-static/argon/img/argon.svg new file mode 100755 index 000000000..654e2fe24 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/img/argon.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/bg1.jpg b/luci-theme-argon/htdocs/luci-static/argon/img/bg1.jpg new file mode 100755 index 0000000000000000000000000000000000000000..26a52a5351f3c68d326dcacbf98fe3cf9ac485a3 GIT binary patch literal 159265 zcmdSBcR*9iwlKaaqA0yd7lQO6Nob)<2`zvGq&G?Epi-q+P?TPz6M8RFLoXsIy@W2^ zLNB5M0xA}M8_&7to^#Lr-ao(hzIVSRW@gr&%-(y}nl)=y$??qbJn#^pId|?H#W@-Z z3YzoOl+@?h7-(o1*e;wufeW1HSwT3@$;rdZ&&$Jk=@J}%>5}qafryrxnwFlHk&cd$ zffoG7%D}|Lz{5j=O*o03abc0kF&OKtxPJdW!7yFYKT3 zz^@B505LHUF)8UO;!`9f#HWbJK{PE1HF{kUBGa|Rxju^sf{F5J$O z>>{J8;e+@*2~5ok-fRU8eqNx0H>7!W*`K7dhuUxKoka$ z@gA}$18e}mMRW`#atECuBL%#Pg4zd}Lq|!)0qTyEj;F}-0f71@SUU?apE}W5)hLF9$~5I1Tm2Tn5eiUiX3(8fM}*4KSKeC0Cp#DfBH)gz;#jqfDKZTUlT|Q z&H}Y9Q!qH6wkLRI;Ph8pA}eLtAh6M4Bu+g82nd{90O4K<5JU!CSOO-2-XY^fbOaFrlwr0YR{5k!0RSK+{{XIEH8QSW^!Wn| zRw%$;zZ2@u=)cr$!PhzApZ_@kCkTWK$72V%ICvg??eoQ^X4!^-R4;Qpj57+0jvFCQ z8H#qhUVwHut6s|B>MJqS98!1;5V7&e!BGW2JFKD-B|r{j4h#avp-|>fwiP}hL10h^ zsnP;iQ3C%H9sPP+u=YVbhwC>s+?)ZMfE_rMPG?A=0pP5iz{yu#NPv@0ASi&`3INMn ziR}RNC}Jj^D5Bd*_p#hL?mo-s<})-|kN9Yvuz3+Dk3v03GD+g`+w8Cs69t_G=ZW<` z0Kgss;^3qhf&6^-*WXc;GC=Y}Ss4nlJ!x=GN6>FXQFs;v5H*2fK>37Pr<=g5$|PLM zCk!t5Co+(MLj(VKcaSZD005L8e+3eN23#5cO1wY%*q#jWzX3G&jwkk(dzBN_Q8}a>WU=mAoOi9hs5D$-OO>~@EcOpOnJUo#$AbE&Gw@)U9^DQXz zPAb2EQrVUplubn7-vhQvU4{0R5dbmwuig$cR~f$NyfCfRz6ekZ}Se(O{~Irfzd(OX;gg#CSX>s*eRLT~S)?B>qs zsiDoNkN5H+y(nH?v)M?Pxs-nvzo?5d`<&C^2Bgg=Et)6umi)bCgl_=r;!z;;~LLPOV*si=}@1y9lBEzv%eNlRmtr*nTX%DBV+u9n6dV<15 z9u7;G$t6O!@YtJgEVI^6{nBT)yOXDi@4r}IcQu?|T(vWb)uyY>qgd(Lm(6jv=o({D z8-wKqoh+H(w`=j=b_-BN0j1>Kj+1x(Mbi_NAP`)a;F={;7CMojzeC4~YLG*G>JRGt z%f=4?K_>#1`(Md=viiWa`)}cIL;Txb|MSSx$1lI$W2t=BEz;lO2uZjAP4xLB_Nd2T z%M)p1@Tql6_4;dn^*PB{hWKgy{^t~g8+gkt9pzTvXQGM^j{%y`=I}TPiP_WU1VK4R z6Y7+!j-(2DQF>_yVg!ZP7kGW-auf6?cg3;Kicx;yy+1&~J&tDQL%~tKe>XjY?9kZMt1UaraGLbvA=`|_!H%%0YjIpSvUHU38MxlA_ z_jv>b>k0gleAmH>IJgceY;q1xa1`Lm{|%VIUGJ|zbQA<4DE^|4{OZB-Z=~p77W-eu zu>~3KzuGwe()oY7ar$`b%b4`|^KIb|YUn$m?(yyDyz&PrU+uXCT3AOPjMXvLGPjJr zq4PziBl+UYlg`Xt5H&S!D%Q{lFD~twvuT<_CO-5dlf6pYVs{Bg94a3LsQYW!B35|xH$5S%!pgt~UTlccxJ8ewvS%35>P@WUn-u&)ua^#Mmyp-l# z{`BG=zfJsrg1o16Bm&xRFvh|`JBo8o?NKi!D$L>5^u4le%-7$hTsMFs!16lAZV^Eq zP+uVh50Bzx-FEJDGgnO~;CL^hCvjS-Md-(@RDCGt8Ae;(NB51H)E_;xx-S^hk;C`S zF6gfW22WEbyXn8kUU1o;vE#D+7fSxi?)=ZICj$MSt^b_bh2zmLiLMOTM(N%b9#Pvm z33GDMi0N-Q7gkJ-58I58BYx!Kp;Wp91s5w{Cpywz9RhJ>zF)xQlyk^O8<>tPGg6;G zU~+;hSXv{hCSPc$A3*Bs#$akll-`X}612`}(@If{zfR+%LEq2&QU^Czivqr1p!He! z`cz(B!EE#9S0AGTlFgkJqk7pzp58?-1$qS$!_kE&+o)FYsKJ_O|NEN#1o~lvu^}A? z7ff|Dy+nAFS-H&$<(2+Op#kO~6Ez~y;JAze5>M_vbX;U6Wwhm^k$yeS_B@)#p z;+h!{{X9Q`^A>%cymjKwHS?sa3pgo3hsc>8Gosq`_74tY7U7ASOZR^aKA1fB&~04& zC@F@OwIq)YA~;s3F_3oFd5qOie86>Nuzd`NO;jepu-$^fu*3&K`gkUtq>y8v8X1?+ zdX%{!rtPe_o)r^?cE&w9vZj^_hfh71Q#1)(T0Og!qB^rEv!PRxWWCLsdwZQzq#>Gp zINf+0Cx4XjkzeJuuA7^$V45KN&HjZs*l5XSq+}!_pU1RSU<1_(jTCz!T4QmJx0(+% zjJDUp>29d2)i93;U>&8jB=>pq3KNsk4b#koJw%fC`FitXFO}9g=B_W}YWme@-mQP5 z#3G*B^a(~+X5Ri;AfJd?GNA7Z=@}8%5bTyui$H9SNu>pN^trOIGuK*i(BMinuvkm1 z7t$dvPD90>&#u5cIhWP64_|Z&D0eFPt0V!5{!3{9_a0C`;QE6HY(XXdkH%jsf0H|Z zz5Ku5A_h;(U!sZo@f%2^^bK@^8h4Ha8gumc>Ssu|pz-qBMPo)+W9QRI12MTIj;1F% z_+nuzs@t%tnXMR|m=;`xawh4X(DaU=M7;w`jgxxadc5R@m%dmF%Lrcq!mI*b-z+6; zrP*?hIC+&O+hA6p&OJJn&o#Q1v1B{sP4hFBChds=uccef^$LAew}O|N^AhBebu@34PA%?_-Jc63+>F~tzGkwGILz{iWsF7krNlTpL=m3jz zB-{l_r9D&_;8(+UV|aG$+Mos&#`mCS3$x2QyKTEVlOn`s{1MJ)_5;P6#6DX)jdrWV z?Xu#&e4fS(r_fd|_jXxOyx)FHs4#mIDVpEenO%|j#qZ%!vcXm_Z#vR3J63RvJ!F+5 z0vVxk(UY~uoK!N6&p&ngPpw`)p7>(R7Ip;-i4&xRonsM9$}zBW(~WrEF#6zP@?19rAd> zX$oO}lv=E5*=3^Ie@D;lE73sQi1dvaO*DR%;||gY-NM3StZsh5%6qS0r%}Z~bNr&{ z0BpjE(32)anoP!#5;AZxr99apHx`nt@A?F?qut@{LNa@*r7VRM(JnWr zATh#D?5SGTvAe>}m%`;g_@?B-`gwCDT76fRWM>D{6%LNr#|OpM(0zji^#yxU0uHW* zr}=tt-mw}N=t|yoc5T(m8_m{vN~quAh{PHD(~ zxDhLQF#7fB1)BA(fD9#C0P4{PzL=12CYC;>%QmbAsWb7@3Jc<*|zGnG2BQx;6Xl0MPb+?p6-2oZy zO8f_Bf%xgStmG3yM~}&Wj2dT5g{9m?q3yLd7WX81kFq|KB%}#9e=;rj8haxseax4U zXG6R#W(f6ZM_HRca!nIl~Uv5gM#*1 z5J=RY1kzfOr9*`3nC{a`P>9jE2T4c}op8Z?*{>cqlsaPT*H}Dm=G*7yHKR>>4AdyEe_HBQ!E2 z`C&E*rCJr?Y(9eL2^zAQxu4SJr0e9iudyVqNl89i(RQ`Ft)^BWRfu5GJs|Jv@q%k8 z(G0VE@L5m6M7ZBMlSFqfSWsdx0d`~C2$jUrINESTdy$rLUsRMl-zdSD%>B+7rSaOh z)zBP?6o0e6iUrXDp9OVcoFF6*uLS$7Po8=JM1`$@aEQCbmxEuGTjxwj95^qk7ZTMqBF^`HVf1uXGp-6U~&1B=>PVdb}cLD~k7`S<{z2JDuvB`e|E|OA1vmlvpPy9u1_kr~@It zSwFi#ljn)!M)ky9@c#}3fvy(9ZDA5cyW;5-Id(obwqFEt!Ww zpX|Zwx3i4tSDP!P;u3M3JSd(gnlH2}?{jjy^&+~1-DWA@@vhgiO! zX^t446SR=?b9-9#jngGTy8E%IV#1@PI`gbbDsIVVZL#s4-7=Ds`!_xM16W*4CYOg= zGim#79|P1quT$=Z=0=9qmx)v;s6VcUN3gif!M~@?Y^<^3BH}M7eWOfsD;hwHuL){` z9yLXG3ZsFwGqajy;%GsgX51m^5O6U4`*)Wf4h?%q1ygSdiluR&P^igHxk*epp|91N7_NB$r zVvPbk-#`j=(ZjjJr{O!B%!6kus7)?W7xnU?^rXLv&ElU6uxLy8Vq>aw_5AYAVl?4{j^b4^<9t z=<8Bb2PYI(u9ro)L)^#Zcpg_`P6-RAUv8+IMcrOwe?DxL<}H$zCYTX{j7t}rohU?= z^gY)s6qjDRfQWefHNv@3+Q5tD6UpP*!e+CK0)DX`&p1jpTt@K%PT>|TF}xwh3+i=5 zx`JKNjh0t6#eVQWY&pkZXZE=tzowS~KUgTW(|mi7V{yIY=`WCl8rpXvP@s1omN(j0 z^8hrS&QOqo#_kR>?xf%O;y=Im!w7%xc=W41Nj{l0_PP3mIfq~VfZfaJolZ=yXq?Pa zqE18`ZSqnsrS7EYSsGa$hB#Ia`xosqtAuc#iA2Ld_Su~5Rw2{fnnm*s4~JlL&M7ye zSa?`S1#41N{&3dM0yaI-Ko&`S1E?6Ef@nk1)VU#H)T00vO%%pW7Mzn85bRI_Kp3E5}&r^5I(9Ekt`j!%Cv-2F-?j$=tJodJEbs-9HUb z$sH=TGvy_yWU2l$WG_0WtIrUH3C?OAUi2U_ZPWY7=;FV-urH(QS}Mrddv=p&s#92V zugR|kwO=iCh-m4xw0=~^z&Pfi?o|571Ybyh(SUMPgTJz11+H&U=d0q7(JOM%tuWU& z+9(1IUAv%E8SFCmyp~s(?eUyoUpQ3CQIN7E0hYk#;ORCzt(gu>Xp2aI9B{=a zOYvGcL1^9hwn!vL;?)??$`X{DfT<3Fxt(Z})lM(^tE-)rL4&Tc@HyfjWfFim=RcA+ zx&HZ7$75eD%~+lG#r3Av(~^sCQ0M)Kx*Ds`5R>8kV_4o$*A+hyEv{3^Rf!Rz2;K#sa73skdbA%I}c5kmGi{hD(cba z_}JXmyxBhx?(u$fGfVns&-F{M&SO|vg)|?t3erU&RVVF$BK`#@VjAuZ2BN0v?_i(- zg&i zs@b3Kf0x1xU7Hv{D{@Eo-DSx;=jtY?E|rBM~p35G}IId-x~$*SPiP??4~H z{u6A$ozs-MLUQ;G|J$5bjYg34=ImwVw=nTeQ=%C+(`0!h%*=0K`xBNR_ONZ#Y-B)^ z6o#)6Cd;iDg3n}soLuz8eooduIJGk?IK$oQti2%nz&-Rbw9ajoj>^vLDjnSEW#y|g zP6PP(eeOAF56G2K9uU+&QFU0>?!2Y3;dF_IsT_W|OX>Q{>fDTo3)@n-(2Z<{HxQ)Z>-%-TVZ43lP_AKyXUG@YfsZM`7IC> zsA4XNB++#zeO&G*AS-9rcfMZSikVrtW01CB!sAkPSw<#J{Rw$lOo0ifgD3XUyzJh` zHKRdnN*=*4;b$A&XZ-5oJ^-Hr^{zmK#?-F*#75SEFtf z=5&@Sh?IIpxY~OkpdJ;tw?s@*a&*QXa1FTAalw{mG~^V2X@OZh60dpgA+8REmW7sC z7gQkQq#lfh6}YpS)7nYmB`ouQt|-(&Y7_G1ggmFh)U_*=s;`(%wE$%%m?x~y+HW2M z0%Bn}NDIACPEv?!I^-Bg$mdz;^CZC^!9GW?bU9*11$iSxC^Rf|j#$Ys8YCg02_Bf2;I$6?H913;iczD!?oiwLll0v4l&{@!);Oe$%tDA&z&L^TM zIbpLuyzGDGx&PaBuD{)o`gr1N73J%~a_RQT_gReRi&qSKa3jqXh-`}2Z&WQ!g>y&q z#%Jc3!|TVZFALSyK(~keG;{+vn5Rbx*Hsx?gfxduth16qX_2ZFguflKsijrNPKgzQ+JY(1n1Qyz*{?WRf_@ zNe-yX{RZkAXRrXtwR<<2>3Xg>ZAddEo}Z-TY1}r4MM^}HXf}RuWs&^g$j~SzAe_gN zVnr}^+05-%U5kgb$~$eV;f6CetYk+cYu$Yyx)6sI?5bEHGA1B}X?7&wXHnB?;Qi6| z%TUvduu-?+>yH=eMh84MF6x*KTg^V4Ey!MY;kFQEq|?H86dVw#QsYuype;zGQysX) z9jDy6Kz#o?RGi%kUPaL$6OG3*a`sY69A%DbL{rT-PZTvURFP%IPI*FFWg(RZKGP4`R2u#W{{g{d_!;3k)t7V zrz|;Y^I0;uZZO|3*UrN*MXCcWck|gUU+IfSM$_`%149C6#>(T;xso5L!!+~C4mlnH zl(2+vxEZhUGt;>9?3q+1kC}AXI3oF13gJmwaJ4~vySS7?fgIaa8)d^h_D4gyY1eD6 z_=UpbE^$jaPwwFcp+kE({Yxdye3|rvU&Q;flB-n7*Ac~8uhUrOS~wkES*5ACeOgX2 z%wv%_^D#u1a*<~w#6s3%1?6@NY0mlrw3*C|!=!~;b9tQlmU`h%Bik;w z(Wt2jy(CBi=pr=~DaE*Q-~<`%=VeXlF*WZcFnqoCGqzl3{_rXhDgVZyq$k0{=NJ=Q z^Uv|8BEoC6iTy({4vECoVx1?75^>Pq82P^y@%Q1Cjwdq~6pC|u<@Kls@$Yn%wmnxL z<&Oxr#ZWo(d1DgdVad`%-Zyt9(6#x|Rogenj6C?vyRFVl>Uc*Li;7ISCaw2F;<#h`P|*hH*tz+j&k?fQdYo6c_Q zdWO43#UM`mXULONo;E7(6>#Gp+6FbribZ4hMa`H?oD_{?QkPVB#`)$Z;-1$yKB{-L z%t_f+-ImI%Qq<~xH|mjA>$an7F0+yrz#27Md>2tXt+%Qz)tW(*j@mF|Q^VUM=H4AZ z6O*^c(eCWCqE3e*+PHxstOXWsknAQK^U&xN1WD_34=;Eq5JAQuOB4{%)76noKK0z_ z(qz7$gVSbjS3SNXn&%SQR6*0DA}}4ZTvb^dpZ%Tn`A^gW#!%>BnvpQ+D(slaQtPy` z;i&6AQ($Q|j>wf7&Jf1siMXGUie8LqFbk*y*+JWSO9Fs-aj6o0EAr zGcKO5+07b9yBPU+K2g_4U@%da^-3C~#&ugqJ2Ls9)aAsngl$(Tul_CNnP40gL8}`v zCT31QbP6|M^Wo~;XIMr(7fuuMvk0A>%Q8Vyh?=99nIv$F%V8jiF-|KM@T**+gSqna zxMqlD_*G9_2r9}mD^yBrel$@!4u>T)XRLYI_h}}Te=>`zu`Z$;*e0wx6xdCpJPqG? zIjz|k63kdCK`=n*+U|^*Ti_)FeCOjzN`m07srdR z3I$yzT}o7fUe>iz_APtCpXU~w+mam41~3#@6}y6FO+ji<*^{WQRlHVu-nl3UGyz!^ zMS(68fbnEaodJmZ-O{Z%!fPzUJ>i}%>Im{a!caJ>yT3Hj1nQM4|In|5K&YHXB+_>39EdlgcO63Xb^UK@@$*Bt@x?ZtA*i^RQje3CjnxCDcS}B zjnZc_(d7?hsxX?EVtfIQMLJRtH}A>d@nr0DNOGN}_h_Yk>3L1leRfQhmy__Jpz2Sp zT1|t(90{kT?tzbX5kw^VE8@J~juK z7U^kdDHC*!xN7Im4Ku(fkC89Xl!Co-J5DN#YYg5E4e}F zJadW42e$U3&cVt?uH>ve8nQ-~*a=<}OS1wN0y(^xsmRsfW$X^94NBFH^u+2v+H{m% zxMdd-Y6Lw7`m-2|(mAfgJdi3;{Slp0Vh|G&?knISO4lIBp!gtV#Vz>-@8dT)Z|pAi zm8QeoN?{`DMtv`wUQJI9+*{@vh=ci*>K;P-g}BP-65Xv z3J2u%&GQH66FamYQEdl9_%~Wx-fu*-{>F zlDGWJ?l(3$irmjy=ye*gpM)If2V!pFK0^#yt?IH=Q^a&T`BbyeZZ&YH#JY@8 zSjdW9MIV!Kc5YzCHotRYF8jgcn+t4%Q*o;z&+2-Y6jz!q zc`d|pX4_yicQ+5@sp%)1)>6ErPkpS)we+m${qBAsF90Gm*8_Q^nTqtCJt{aXmDsbb zMlyF-8Yl36O~ouM@2#G7o~QSz$b=3$5_XMKJlA{9X0f7m+F(?=Aw6oZ~Ze-_Jp zV(%BqIv|d(&IveLi=yiK;lC2dqGdUmpB_Qcnp72jnK&x8))U$L+jo%rA!^Vu_MqLJDd4K2&fAff^Q zxN;(S{#)S>tJ)ugw=u#{q;BWLNxaPRH?$6FdT48;U zPv&n_B!+cVS*B-Rdk?$Clvh{YuJTHdD%t2e%9v$oT2F{uum>{>h8z<-)N8MXTflg$ zZAxGgy%4y=_yN=*Un1R(jkZV~4B2=xkPC?e+Eq$ys+|}PY%YI`oWY(sy`W!B_ni8s zz%@;uoOj<3AXS_{ViwLU_teWlouXFo)1(3HiW{GHT>|7~i?_Wha^=;+IyVdAGzfVW$8cH*J_%)k_*9gM{=wNxkIdQ*U);{S(cdIPurSQsP z`oS$n`Dgh)oQZz1hNin`M`(8`@0<-~_;~MfOKfg$+7|95`G%jR61}@iKx&P-O>ViT zuG})1sE`boM9ZS$d%kyq$tKOwpW$=k-9sAU8KE9?jXVfVJ)~hKbF(DWsK{QV4wE3s zKI@mZ<<(qY^c8L}m=X?(k1mf=(GlseFQIC~fsN1IVpWw`8)}CMJ#P$02D_W3E7#>e zA$;~FW$%etzCy^P@IPBq6uyJR{oZ$*oaiVCTDzuEl}E>(i2jUuAyIZHm4AfZ(8Uq+)r+aV72z1#UprZV(A|D9ws; zjgBCqSg-|%a()*D|9^|W3z=Ud{zKCIYJfheuR|HA)mL%siT&xCDZJ+FbH14P_ybvJ z&j^f#-8!A4$?xIx2OZX)R)#ys*TqV)flv+6)>={XeQ}A|c?#c(JNlr{y7i6M)N^5^ z%TiNMG|iTX1Z*auq;_Cw&*Bd5O_yH234VDO?%OHZpJsKGF&-1r%vl7>`Vp-mG@xUM za3Qe2gbPm*dR(%?LYo%KQ}9}Br&-k7+)`oUDG<}lzL0(jN%aE!|Rki}T_q?KSp$z4V-K%^k--(?6 zltNJ)`+A5xE`oQf1>v!>7 z!I|;iEuxdvTnBa6zDVbXS$PK%gV<3s+LVPd9(0jr_Xl^;sFiZO5GlnaLsYCs7;q;- z%|L5Q%{oZp!DE9_;p*o!LiB=TT*Rt$FYmh=j2WmG=4RG&^)^qFda1kkEZymM>9s!7 zFrq`@E92)ktvc3QbBLHmS*4~G_+lK%q^*1P5cisrD&!ypdc-2g@D{AIqT%A6>T?{A zaLrr#VY+GVwnLNUhxr{#hS3@5 z6CTRQ#op8!_?F-mQ})F@WC~<#mJ1R+zAmMHVfPiI;QkPOvWe629M#_ z?`46?SV9HBLkJ;5#GZ2Q>fX$L5$C5itLf^eW$t z@TPZ66CYxHzQ}STVXjQIgNSyC^v@0^mCHANqP}Jx(K9#Hffh#lsVYpI4&ET;nw|Fk z?%IJYch-m)3ssbtgP2$Xe(M#)xP3-?G*_J!N$&dq*zUPJg+si+0Q|lbJ6%pE9xYsqPjg zfb+(g_dH|0cv+v8jYvtPxK#MoizaLxlsgjx0F+#R*eAev8!%P-7yOod{d?oTDE=ZW z{?_kbC5-Y(>h0)PvR8?X^kuC1XX_FqVlq)lZcg=TWvtEj`X)C9KeJ)STm5dgC!+JOtzwi)zvgIf+CHcN|W?`6lm%4rOM%d`uX6=%fP=5c2oWpmd`-PQHUb@YS z+cnT6`lNY;!+~UCCX0!o$3X62u5>_*%4dn-EAByoL41^;KhK*6NIeF6gaj^KrT~;U zIt0{JTlVc$uxF_57h8Elqc)y-=|AhmBCjiie!A)wj^FS3yu8QnRp z5;@tZRz^P>?&=T~VruNB%E*ePxO`8Und{UMsgae7d0bKw(`8?#{yI5GYW9~0UBop@ zNso=>&Pu6oJ4DnnHZ|4WMo+F=B*pj$Z&0?yaBSe-kd0h=l+{}pK8L_=M*CpgHXfF& z_qa1@XrMd;Ku>o6hIzve&{dS5!5+1QGa9VbO5mHlE}|_GF@0g-^*L2$9>078Miu6b ze5tT_Ne54^0SzfkJ`chZ_hheWV`JpJRMck~f?-8q7L((ewMQ%CdT~q5fe*Ki|9bs8}0J)ZtI* zo$U;|Q0X)}YqQGr5Xa(M=Mm-QCR@Zmg62hcj)CU|tFFdK##}QA4YqITS?uGlYLH#N zQD}O$8FgjOSIX*?jM!+P=ORofzj=Zq#Vd`qKY+u-+AvFZnP#ZUP^*n1WyTI$C&x<( zs~H!olX^JkC@X>f&Vn!5j(Sg>vHoxx{WZ$D*&HDRF+3vg3o$!)m9WL6yj`-6j24_GI!yh>q4i;{CYnXer487Y-v~IZ0|RbO-?tjUe3xU`E*G&)TGnT|Bemm z_mX{l8#PaGN)l(5AbWt%T+7l)5|%=A-iR?{ufR(N6+w>tBym70=(kl!UJX3xuLn;{ z(O{S$zPiI0S`85S2Avr8|L)fM{X4&X^S}HA1ML3-L12pp=mIW--d1vQ@surf92*ij z8t=%OAjaa9OxJSATg#i$DxB3{)F4(bhFIXJ4ADJ+=wB|FAM4ybT^GIDVnx{vU5M)+Z=jB-5X=D47I|V`A-wBm<*P7?v^i5S#I7mOul*@ow1ZZNccg1449N% zY?wdv9%O-Le2s+$`H<)-pZ*EaW>p>?J*7)z5x*~>uVSW_%=PTK9dSf^6HJ-Rk{{{I zblMWeRNx^fiFf7Ui*EV)4gaOWXQH%!N%~u~ZjH0=roYW(N*vDAOu`)bxMabtxXN!k-})%i_}MzX6I);U_FASyz;}`N zm!6NvY(5Hza~O5xMC`x8PlV4Brev>i=;kswM!n|Cdm`}6`bD_wLP?g2zjOMPG*)_2 zcaEsBJQ3A%#1?1SUey0te&N zdWhFn)ftGrZHG4Pp#yHE=BKw2tE=}O+jv0g7jlcxypWVUxOxw2O6&(pJJM-T_wqNo zV%M3n%jj;~{uUwObbOI~-LSuoHm`1OMbYaiiaAleZF!xo+dtV44&*>jtga8jKDY?c z_GMkyOh?Euno6j_VK8!Qc6ix}PhV>lmgOR2!Y(3b;5Com@q;K78T(pPS1e3_H9 zV{u1I{JwmNg1*LsOo^LY!yMv!N7w1hc_zWQlU*59+NJ(?wn^h);8siJ&#Z?mb!LOn znKX{YXV){X<21u+#$KD8&7osy>H|oW0a__$Fhq1{u0@V9yoNn$AuZ0Ay+_Y(9qMI0 zweb8Typ&_z)s-W)l&Qc4o5GY#YPvn`>1?Zw5h<|+oPT9U{8>bhf{g7308;->?wr_b z|1EI+hE)cCTjW>m0+cqtZHc%Z=7SnCYDHY4H$I#qj$rO6V=5nV* zce;rU$FmX|vXipoeMQ@)ZoIjqb+nNQg}J&s6K|g}CN1xJc9-l4zOTZKkHxPR;a|Mr z%(|=f)buM;OyH5m4=}efAk*?L`O?rrHY~wMsG{-eSbkhu&rJfr1gl}bKTdj8$(Gs{ z;7zjmKpUAjY5dWaGm@&c|0jjWo3L@qOrG4~!ElsHwM6JOyYt&5)%d&jj}oDI$OjTA z=f^m$eMkjWKgt!)u+3Z!sHzkh8CFMV6X^Ja8)pg}8tE@OUX0F~W6@N}(f5daV6E? zjYY$yA^trC={2?kK4J2OKkEI}c<&hb*;~_>R|n!cv!$XRS1QW! zW}&jm-!Byt9Kn6f=f%zCOtrZHn)`Tg`g&eq@Zw>h+2u;-sItHj^+QQTCWE$E;n+|< z-!j$qw=DAGq2BhpQQ9mP8lmUrf9Uxg1Fr__(>HZ?JBK8C5h@-Tcd_rSd+rvhn(@ru zMkq#xektM)7c6E2msRJnaP-eydOqjp_00UD zf#5NK*P;taVhG3YLrUyO)#Xm}K`bUA8Rdk*JvrXA%eIduZ6)4eG#x6$qQdd{*Jsub zF7@6S7I9DEo8GotW=(Ffq50Y4xpd)P>A;G^rAO-&kKgnM193+v z<75>LgO|`wpPNKJn`epaHcc0^H*y{dn#kX5P3Ea|pDaWy8-{Z*O#rne6yZ6bksqEJX)N{>xo(4p-r3D|_L0i4Z zJ1LS0JWKFm0iue(I6Dcz8S;7(z85{+Ksi|_5k;#qaO$7gQ~#1h_1lX7{TEU|r#kps zIb8q1os`00qS8$wDK+j~BGpk5)oOqSat;~ipgBd2HmK7*KQkcm48xf7nPZ$+ld-?x z*_zWdlXTqp)*Tyg+b{J)v0u2~wP-dT5o}bItRz`UFY?v*yG3ko&-z`m3nZi#F46=+-Hmnr?FRWn#XLu(s4#Q6EF+P2NoEhj5zzL? zRw~fu$Z=8TCr`F?RE-9wjHMT5I{sE+QRz2M&Y$b~o!$ z%bI56eU(1`Om3%f=R00s#LH_Q9pN%QuYq5Y^4@(zyY%JzGigRe|07<8ws?eIymPv8 zkX#~|Z2ds@ftXO(c^*dAv*zDElf{Q_apwp+e@hJ4VtP!;9d?Euqby9KIS@+t3`di` z(|d^b9Ru@bg!XwW3nCsf<5U3RT$pwsoe_~;&KX}OE}}QKKTa*!N}##w4|$o|d5!^E z9$3KuN>wvov$l+6awYZ~hp9Bu)AZ0!TB9^1lT(Re3%B()X?nwdZ*SjjAIb*i2L|x? z)%45>fzfX2L?Sg0ChV&5W<{!Ym?N8# zbYfG0k@)55uPQ93^LH#WGR&>^6{utEngk2{zLS2H3DcQ8QVPeI$>_W<{d5eJ9NjDF zyp+XpbbEg(07-UZE5fFPQV6Wk=Ez$LK&2tAoAMO+^JX-EL;Fy`^JgoPc zC+_={gjhT1>E_Qvh+W!t!bOZ0%nH?ik2RDOZDqh^icN*yOOU)&vh6gN&P6(-%=a_s zb&eAg7+M*m8+uuatm*1Nw5M7OHG7TyN=!vokN(5K1d}IQG5%KA*Kn`Ukr8BnZGP0^ z>H{CqtX}9eC+2(~4V3XzND27c3Wv;8FS?JS0Fr&+Nw`z$HX3fsDhRtbz>-`yKG z@~zBNK@xblTFQ4b^hgdBE28V}6~5s0d>tL(JiCd>%og4m7F$YC_;5k8OulB;$2xo{ zz$304>(L3ONou%xVMMHi%o%VGvF34e4yzun*Bowlu1PLrK5VPka%h6!^XyBdo${|P$~S*T*k@Y}?O_px2^QZnD&OhNtlc5(Vr9fz zjSrwR!!7PU1a+f&ilW zKg%QK-x@?xV64R#SKewMh*bO}Z;!ib^g&#Kb%;}ewp8S^{2RIy2|`0N?#`LF#bgTh zMpk25K5xXhiF?IY7CqIoVq#Vjxpjb8Z`~hpWmzML)Oy|Vw(c zjKD(|2S`7zD+>>2f+)qsZbuxN*Lbb0_sz}cmMf)nHn*)8=$Vvcyehf3$3>zEQ2Ir= z(8Y?4N7;W?#c&ZZ7~PVn!ly|EM=m7U=5hAaL|CB;H#ChZ1|uxu7=4>n}Xh*${D>RqL)m(nUKtyi^#*Y1pU= z3NO@D*jJw-sroF@57Q_c^N~&I{F17zC?>ePHYMg<@Y36EmJ-2kzE4|4dvR3@ZGI{D zakxe`=&kSm7DX1RndnR}d95%)R^%JG{IoQ_J->C zbA|FxU;ND8L`dB1pFdw1V%(;eS{unw%JYPNqM6tIshLx^W+5E3eP$G(iW~*;P8Scj z+w_-vi6I@sOixLETgL(%M7|5XCnvTH5G-xHf1j%e2X$lshb-+Ig6`oqP^<@wuB zIV}TTR&G4+(eZYTj3UHV^w!E=>%Q4sN8mJBNM2RAv6FF^({DuEhPpe>Ycb7ra&_>z zL+?|oK=R3+Z<1!$ZZ|`I=$Gpuni!{+ZYRmqz0O*n{4V8kn|0cq`oh6P6fCR8XXCZo z*Vwcr%wSTL!Opwk8@mFYjw#LAXP!<4@L6o?9C}T^tZE%M#%JAP6izNK6sV8d`x2Y6 zJi0ElIl0q?BFgHe;iA2qlakYQg+ld^DE;Qvnr%!Lql?#;6~?@Gut6w}(51k^k*=y6 z!^xd>JsTmry7<7J)~O&MBg&VHI6-KP(`#l;QWaNn=>d_LX*51zd6xyI(n#x~62emy$>^Xlh6N@@%& zhKe(CN4cK-8=v`Ds(2)WUs^ZlWo6O$B4n54w!7Nx=tBO`32)Qn@P4zjUgC|cq^yR_ zlp)JTL8KbW%_LZox*w!k@O8av|JU!8ZL0nM^E_3Id8qeKH8p3w{n+WjafknhcTHUe zyI0Ud1%ws1(#Nk^{qi0MVo|KA0o-I2VfszMgTk79c?>583ZHr3cV6plXyKKwOrtcO zeq^G^Iuxe&Z-C(_aJk{A@Wx!G%mbK`suE$%7c;b=rTW*do>u&R6}o~RP-YGxM>IMq zuD#oUyfP%YWDvLm!qi`8$P~ZdAc#Rf_Ae$r8+efIcc@N7zz5m@kfC{b)tbSKuVT@` z10*Syi^^AD(d$)dwA?_~(wy8>N{;iYVIKGW1`T;j2?Z;Wni3YZWx!}K&Hangm;e4$ zzGBQTTE}aXoYgvN>>&a1K>mwDmkIu4i;pmTpY`5qH0N7_v>C5AshE&t;_<2&(vvG8 z5Im4pUAVVo@vCX-&cp#JUUzb(Wh~JI3a-6LgOPJT zf4S|Fd+WXH-zt1J2~srY+7so@tH(Nj{>qd1cgfnTvJYy+r~qA z!sYOnZ|cxC6rN4$e!0eruS2w+vNBK=hfaEUulgSYMcP)m@`_f^d?$ zX$$6^6Wl;lRFS^O;4H~lwKg!khajfYad?~G(_(D=F#4kwKPyUQmL33`j1j&zq2w=% zCD2%v%6$tpTZs2aQc3t0=TX68=vmiykc?d)2! zOFYyRyu=ku3%0C3*0Pn)aw*fV-bRZ>c~b|@U&CY%1o)?-<`weQUn0j;m)qqMm{7w& zs2RIfXw2EO5Y_Q##prPeb@7Se9w=<>CmRlmag0Oy&c;=iJ$4niFz0_C2bo*iHsU$Z z{|9|Mmv@1PQg6gRx%(mpp!eow`4?8E&ngD~cE9!LN{3G4J4b*aI_ValAs~9fzA*{; zY)-FPF#h)0bpCND%n!I(J#Y$W=0wzey8Iu9ac-s%^V?+jpPTMq&i^dGAtKZJ7A&M7 zJgI()e7Y$;to>=M?YjO@thShVitKBNgGs0y&31xRDHzBN|9$b;Z~!TC;p2d>W6aN2 zk9U;KlydqIze=(%MnpMnM|$QZ6B4zR4Ifow4{tNMZ`_Qn0?y5B#U}ldYp>d`Miuk{ z|`O0`-g{&ImR($qu<-|kZJ1Lc6pe>&Z#)|sX@<7 zNJQ&Ze#|OKpwWqPD^dBAwNJ*ygTIHaHcfmIk(an7IeDe=kK*QZ|LZqF%Ne`GG2$Nfp;Prb%+>#M!#r}+N;3O zps#HPKL&baR<%=>e{4gFu0z_%KT=B6JMe+;dpKmb3r`YqB9sUkj$2c-ss|-~VK4gUXG#jyJQGm$@-fCT zbItsqzBCL64=r`VI)?zcOJ|R+J9LNpxJVZ&nL~j4Pk%Z4<(u1&^#)VZt}oETegYVaGOOd~R8LFOkDA zTHuuV=L-vEFLa4%P8pUgNs1ig@5vSOyt}!c?%sptzVAL|k%2=>&AQz2ECsOurx65k zNp27e7BXUM!gecwP5H8s9+>E%@n}$nR0}e`X&IXMEWdfvxpwrAH&PZng!j+ct_=Mz z%H96o=Kmh7zUfWe0(2?6SHfv?E;D*!;jQVPZ2z*JW5vAx{_@zmdA(*zBkMm~W6U!d zOFpX?Po?@>*jV+9KFjtlhoqJ^a=vxjy!|&@iplMhf1Yz08vIjGAj{;lHAe%w0-1*6N72mbZv$I{@nTqvD2@+GomGm#2 z52_t`hNaDSoVqkagp@mg=pVD0CM2W?(#tCX4XB21vB?+3T}{RO)&p7s@hnFc7Z+%{ zua}()9`(in+qFBrFxwZGzeIu~WWr|xG=0~OKWoY+=wrC~Q_t<4s?S_LvhvZ6^!OJ0 z;|bD$!HC?bFsH$@hT10GLzy>^L<`ct4jS^Vd-mCEd4>=4+UEPdLL<`P(lY(o?z8mC zUhrr=0N!jm(zu4SQhqp^oXrq^_2H0*?bC>?i@{@&PxBmBg$kkIo;+RDZn{zF!IM0e z`N%Nv+{Ei7&9NTUhfg1LP1v5*SW?jE3SIG$Emv=X3Nbahr?V={T@!G`nAe&7Ro_Es zfxz7f1j}|~SXEsOQh?xv%l|iZ*X&|*`uh)Qu4G+dMVo~q&TyH+FN(>-Pz}J4dPt^N zQJLU)1hs2=!mJDf8$DFD@zES6sKlWrw`X6Ca2Bq7^%56%QCayubYBlNIE4PIV0h_9 zk6H;Ljh?gVqR{BPJB&&9=GyaX(osUzYve=2b+S)#q>}%&98WIE4sT*AOmN=xUzmbJUGOBp{6|SuIb#h zV60X47=v88xZ_Sp$~j2+yw!M$b`I&(X;DBpH!T)jZz?%F5sY1p=g{NcuR3TeqRA-3 z%T3W1lx{WCMsfch{q|L7u~L*m+mzGp-$h0)?`W(K(a?2;>smoIq?$UVrux1vn{Sa- z>l}`*j^_1}KaOjG*5V%Gn!?AkP4-lsbGSZFYucR+-alzV2R_x4Du6WMAM8-r7GyyoRZW z)p{3nw`p4q#>=U5zQrylN}u;e^RQ6GY(H5_(svpK;VcZk|Mh#O4;QNptX)M{^rRP| zO$5@(N4g99yVhdxEL1_p#h*(0#vuAaf3p4dXo{FE8XB4tkP6KgVozvPZ)n(xu0i`d zSie-xf}hlVW5#)2-!(Q12pT<*AFOppjQODBzP6F|^=Q*>x2?V{B+CTmp(Cz#RiL~j z?RYlMVa92wDCY)Nt44@piJA(M!3UqgQ!-_|;OvbiYDg@GJE`m25+Yx#RH$HvKr~lGg^#x<@&4%g z!E+oH)qKn)7mqFxHh2_z?ONHNEq{+M7k=f*a7~o7(0bQ)3m`g~6mKEn?s9JEso|j* z_+WDL1H;NIsB+UZ7jtQv^fnpo zg3r(OpwjR8S--q^j&Qr-nX>Y_Fa1DFvSV^Ya!nq~2eKXP=V7&oH^EexvMyJ&GghyC zHM1O9jWl_nVm$mRgiZ>qSR>2WUnJ$L`4UI)u~iOAQFl1Rnt5>Zsh`B6H53Vuai;c- zGxIxPAnHO5T^5fzmE;@#bE^B*WAKAZ>CgQ4{<I*zd* z)x*UI>l%TY)7XRJ5D!sSg?)DE`OW8 z^=N?Lq!K4_@4=$qRw04zl#gm@QQr`*sSxh+l8=tl4(fkEOIg~^VKJwbN`mS0r#g?~I&BY97QDt+Cw9L(kdxE_3~Iyvg_X)lb*| zK2YpTrlVdo25qJdGlF>#0Qn`c`pTQ$h_bnmyoxws(QAanB$7Z+SFHJxJn3x`k`rOi zRb-E9tq;@Vok1I#9>jmT5V%Hy;dy-o{j$RyYt75b;_ugs?P5McwE!qr`@_t0Gte+| zGb&Cr&!{o%2XQrzfE9+089^T-btpC0rp?MD1tkMvZC z0h{8l|3vWJ9=?*Hm|FA*kv1Y-r<@nJl3|Bkb7$(`tWI|9(W$1=pv>+31+>HzRq&;&X&R#%n`XH}TD5C>RduFRAA>d#`_5zWUXwD&8h z%9Go20yOc7gI|96Q?QLiLI2~6+vacGmB}XIo+f|F4hh=}@C?3Ehz;5@8V!32(|L=~ zW5~dPlNuUKAS%Z?x2cyUVFb(tSL-|^UT!s=%3jAhFfoFr6OT8&y%aYd=hdkxUHo_W zFzD%8J+BBzD))-v4{v1?SOGSbTh!y5iF`fF5&jhDc&IYH3XcBJms_VR=~Ei@fo!st zbm#NvKu-lEjP<)Hw-ia$9*BCnK7P$7uKcW`8&wac%E#;Q_9dgOUjmWd{vfo2xYXuq z1|-~zm0YOn%_h`p$}2J33rJ= zu!YNT4-k%Oi53dM+~;{2aJc8RU}~ODV%@Xvhze9tp?0$o8!u-(wzfb(S;Prowt1N0 z0oxt!qE$0k^Mu(dDcrN+y0^wdNu1!4G>>~#Ys{#zM)+O_VASW8rsxY zSI9Bbr|kZ;o`%w(_7tT9Y=X;NXmEI9&c7$D!1@!JCwGlJADF0%BjokQs>odT{d#sC zQ{E#ZxGLAVb;%dq@_r3(@_6-But8cFOAlV(6Q-nnzM6RglWWft6mwK~GuY1B!Uywt zE37n#e=k)ZN+NYirwnebJ!I7n_gQst?+0-6q=apPE(da`=@}wd#>!c4?~lq`PxPk9 zQcaaaQW0|7*tu#T%VgK*6zzjl53Avo|Evlo=Zs8FC>|7{_V-uW)m(CC_rDBUrUlIT z!<049$ZJ(MaL`6hKgurjag<1XbU5$`w;m!_e2NZj6yR@aGnbj?TynO3v?~G8FN_{; z2-McHr-Z^Z?w>~M>85)j9_GU?*w zvc>`sRT?^iq(*NuRzuI(H%XY?hj@1_#W({Bx6e7WVRXacCybeVC@yp-U(Fl&QSOOm zkle`u@1x>7hFKLKb9H$t|BSJJQr6jJ?6SFg*HQ53axRt2m25>kx3vW+{bYks&VhSO zNUL#n>DNkg$?QGt@R(zFoX9!H{Sd5zz|EtE=E36#7L&ePE{!BO+ayT2G+TK2>jWtge20RX`PyQ0Y2z=U$neY_i})?;85^&r;{7K{5ZyIjGwv`(@G({ddKP7|Nb94Otc5Qvy*8OD$=<|^V=KI( zJ~9(y&&Qw10737wiMC|fsN7!DjVEB&@X2Vs}d$F5DCMvynHi=)C#2&_8B;^y<-+E4 z-A0y{JscQ94F=Y+ZdMo8{od%Zd8Q)ieO55Y{=uGhKI$!Mc6s^0KO=4Q^z=`;IGUo+ zr)zOkwrL;Aa3y6pI|Xq3lD!sgyyZtQ&PyBo$@U{`e`xS{VkW>Z9rxcQmWGji@w!t< z`HO(A7g4n(=aLQzLo_hB=S7n4XB}!0J7;2)_@1;|$FpE2oP=-?+}xX4K%Bd;rycC( z&_eC5;lQ56i?pC0va(xh{+7Gj4&Fc6Mu~uk^?UsTPQC4sp-seyZPr=0kY!aC@}a5=}F3V!L zyGLJ9+{U-PySd!OT$@z{!Dwd9nSmxBj|<0Q1Os2GwwcFpakjW{2&KXH1R^wf?0~du zl6u3b3cdN$qjPrF1D*~EKB2-wn1?n$Hd9bvhi`Br1x@n5x^6}rk+jTW;h2bmJjv0- zz(2mQF`ob5LRXK)hLf}I)zz_!t@YYHOYKY;G}6$}3>05dd(cHlvPkh|gnT_L^Be61 zIcv#8>?wjFty7Yv1ei3dM@QiH59o4namKJtM%lKW>VrIlLX^m8>4b9bdesao$TM7T zBt*tW(xAYJ@|3EeXkbro2}&0SOGe`{f}*s=d!`(5`#O5Gnd(U-U_)7=MNT%1EAJFH$QPrEogCIoS` zZH4yw%4TarZiYbtP@sCF6}?UV_q^;DxPcd2N;iJV`XxP$hSFt!A|ag2fc%GvR1rn4}9vxC2% zpWc(cu5azNB}JB+FQ#RuD(ug$ic1G2TIR?&-ktkrTrb?QW;gpc|KYAeWuN}x$Sf2k z0V|z5_q%V-_xSY-ZoxnwV+XOeP=+@a6R0BA9O=CG(cB*+KxmS301x!|W7fSe98|Y^ z-T1p<{RiIOJzv~=OGu4+rytK`tOy9+mwUSF-$(bHj}lke8_T9J0rY)d?fsu@H<@wP zC?_{5anE@QLE_wg9O3GhkU>D*nX@f zb7lRzUPY+uinS7qjC3|K+iy=t^GPVzGa%&anfCOM?L$>^0#-cpO3fKs&&0C#z`7-W zmZL{Lc-JVPPrRTzcrud7{3w~T)lkPNRntr&kitP(^FYt-9o6{U!Fk_ggfO{Xhk{v(_lR#U(^85d%UxOEqP@o@@nj%Q{T51~!<*eqW8F>K8%Oc@ut zzXYyKXL^T1qqh9;8eVnhRp8wp_4+cgxnBcR4EFZS?JfdC)?YTyM+K8bs-8vv{@F-I3@Km+xQ3|lW z_}PnT^_NPVc`mIt=WBix0H2NzLOK3kvRtK)RIlmZOE0g-5?X{tn`_&+%d*z@6qli^ z-Z!qQi8P}^Qo%*zOy75rD6{y7@DBHbz!FdibT=<_bxscY$?;cG@ekQM?_eE=ZXNsoMsYHWye3D4^ zSvd|RN6J<1Slk!pIcEWXOli)9xTVC{LF>%+m8pl61IaGK$0G;+z0*xay#x2! zi+{2SsIEV(WeuO-ZId3>7dnv&r849RrXA4s5}o&}uv%T zYTC!|`E7uyX~dO|v5QVZmH%D8A_@b%62TL#P#XrcbYr9!5%bY;lBF^zSqwn@;!_#( z0V}*gcuwS*ju%2gh1E5f+ashaECQ2B$D62{ukB7;;)VR-?Mbr9hJ_2lCH=no;;B_D zANu|pDGs;}h!ab|%Xy9&L+3v0N&t3piao*zDw3&o4@DI-U*9ef&eO8F=5%z*sa0A4 z<+m2n(mT;N$CiiHBysrh1x1vfASD1b&4fKtID{!-!gx+kqCf_-&i2DVOS0T~g+pyp zE4vHZIkYgv$k1;CyGH+pY)=7ZFvel~D&)t#4yb%!H62xRvK$)xqc1Rrh&TS0J_^&< zmn{;)LnF^^DpS6JIWxvr2!2j{EcvX&b-4WqfhDP{gNTg$mnVSqDdK!FrEF|?v)G8w zor}dG;hKADUK?LP*!F?MN+uv>rd+V^N)VAnIBcg zm;Gd$nu^ZmV98KhQrx?ys0U%SkIS!G2pMDHcxQv1nWvUI52L z5tV6TNDvvd?5EZW4>&6a0nk>fp7~_yiAF$};-D20Y-@{NQGE zx`Cnk@Aa=pfl*mjV+Wg|t&uc7Q{vGSU^BDFC5TeQ{HJ2zKy}oG5g@=_kk^qLPEMRx z*fLL>DObp}21%ic;R~VPVXUQ6J`JXTgDALk@}^eCYc7QkduU ztIyTjd106(05JT*J!s1BlxGE*oF}qyU}U~E2urMI7ads01WZ?*RRX-#PQSCnd3ufe z#3MGg&==6HOGztnBK5`wC#cB~V4a1V)etEoc+yv0{Zq9S#!7adtmI9?EII2dwmv$m znLF}QwM{-!ql?W1Y=s5iiHbx;YM($merr0UV%OXAPqIbJs{dtH)3;m2R9bPh9T%&{ z`wyd>&#+bqOh^c&UE=9?cMF2ht0H+9^42=q%FZpZgQu+fud1e9w8;Iksk#u|W8t5k4=@e~-P$wLRZ3Rhv zz7teFEa>G)RvxUV11FPR%qF)79_gjKSlkg@^vt*tB+da9@H(EHUO~AxMsxNW?KM>v zSh(p}^}YygMEJ}pINx94Zj7-8VS z!=)e5kn75;G=)8)uK!oz-=FU(`C-$5#~RTByt#?$o4#gKa!{wkRa#RkB;_4v{p_CW z3QnM*KWDScS1xe<3ZDM@*PP-%ct);$kk)N9XvBLMP1mofaNE59!{?17!`hPfaiZ=` zWP!ELwGx?CyBmU0(b7(;BaK_p>_YhMShAtVa15v92K@ywUu|US-gS#kUKQzq(bm#H zv1!k56+O$FdU`Wr1H`U?viE(&n@u#RRjLI^(4VD@whpWmEbEHjKa5lO2id)PeVO_| z%Z-E62x2&TFkU{n!rc54&kf_a#jA7WrbXI=jQMAI;JpdUpnP>_DMIt zXm+U+nfW?>H$={_58UUvvQ6TJX*uKeGjhjHpdxH(} zu0zbPsY@sN=TqBLf=kh*Jj@<@^0xoUE{eQBWkaul6-SFp5hJ5amL`j z_i6Wy?t<~h*&~DJ{FS)Xbu>`f4|&5(@9$l!T*ELy+tHyc@Jw$;=)$c zK(Z%QdH9k!nKsi_?)O0DFoIx-@qHw2qAm4pLbs`aLIR7^&4SN)g$BoZnejgiiMW5D z$93H~0X|@jAT^ytY6(HROZcp&&~brxE%H+IoY@`R;eMdGu9_VQl|9>ZwA6RJY~3(y zLTz{3v-7}f&&ab)r_eid^gu zULHKKK)^B-a)MNC*)n8d(ZHmTZo+;CX_1j)f}=mH}#RY*+zHZi#y`4y2=4>t;qg$^(8d`OeAj7FU}{E(Kl z5-JPgS1&V|NVHC_<`heuMP;;wYL4%eLCwMyJglRRJqN@B&@o49VO}SZ47vO{4ZgcN zpVezAd|MIQW~ESolR&E^R(N1y#m)rSrX}hsj2}qvGcB6QTj`D3c>{sRmF1npwuG;v zwrYXnSVrgz#5=FVwxpzZtC{S18TGNyHj6}aTyygf>ES7$W~nh&?bCN=13Ui}6P~8< zVp<}Hg4?-%MWgUP)P*~}?%kPia09%NB;XK#AD_o9l&eM~sYq6#s=W`@BVL1JjV;Yf z=Twz1Xq+;?Zw$><7!s`>%SCvqX5Yi+A#a(uEO0DFR>@o1|3N428GBT$Evd3gCVg5? z(Auz?{K+;F>wP^b33IF4T4aUJ+g9>gwprssLQBy8*nKo_x*ixcGw4J}t&E9Q2fLUD zrJ=7*=;`#1+38GSZj};%OuHsRQnEep8EXCB&}+iQ>y;Dz~l?u!_ZIS*rZ#Z zEn@c7<&EL@TB3#VXj^(&`7HyKjbF=JC|R#1$DKuUXngHZsvj^+kYS?OKGX{>5|I6d;*RgZ5_7dFn z5}~cq{NA{lv0z$2t6R(r{R_2WPN0eEcz81suH;(?->9JgkDTj2GdgqqE~QL0dW+v) zpP60YH0Fm{gLkT*U93upPsAOx)>2cm>pGI&q}>ZV@ZZg-zhbDorT1m8e2paC>ut{dwGKVVN}St!n~&^my%BY;c56X+ z56gFUj_~t-I)56{>ZWCuLa)HWW@JtN2*F@KGL{Hh-kiGutn5K45Fd$)4kOQ==Gw03 zdydOn9?vv5M1g_|RRv?R>hC*$|Lg?#-cna8WTo7U(6j6V_r|{@JQ!chAMC-L>FO)_ z1_Se@23Gw*+NEveAfel#_{T-7H9Mi_>}LRTC5=P5tfstdhWX<(CpCHFp23<>YYe5I zNJQFKSH^JS>z9m$7fw;%aSr!=HD(Mg(srdy%JKu^R%KkpOY&M%5uW{<>yTior!2!y z=M6_rk$;`}-QLEPNqXdr6*B1ZaR|s2cA&Uac2*~4$L9oY=nx5k>=t`VRj(hOF~kG+ zvgh8okzlndR;t^51wtSjh2ar~A0Yk?0jO35b$9N^5mD!+o@3OUw_)<5g9gh7l0C*) zxs8D+S<~^-6f3p+=9c5;R#lolyFKg8xVIlycJylb^L=*7o`K7NULajJ89g{oM4er+ z%j8;_n>U;&G>O%7<6t**9S()WiiLIl#hRR3W}eikU|Du|K%89TX?}-kM?{(X%BEMb zrFWrcgCYr<9qh31ldT2028sQBqASwl$jJD+nsCtj_*3@yGn01qAJj>|qTHWs2j5ob zSch@@$>w%eUtJV`{F4oDCc68zOMYh5+1V*|O;634(`1jHo$sVI6P6jNI~bjAtRs~j zuKF!vp3&C&m)dJ~DM}Roo9Hm*CHW47w!)K;=c!v!(Z{omqDxU#bHFfihna(+*r5Li zc=)v`&QncY_#u6W2D>*O8A9SSTi)~&^%;_HZh)A-e-|?GWB<&~b#zzAay zr)sAt&ReY)HLJqW;|)s&gkAl*G78#nvtPaLo~@ks8dQV&k~hv0u2CmTB>cFLO$#a~ zX*J4=c~d?chcc$N2ymUvh&@?)KT~a%Ror5$on(c>`@@hm6W8%dEYq>~Co%Pc;)?g5 zvUQ){2@v3EGBiE*D4!@GOBL^qrfmn0kQ5tS$QHXVdPo9Do3W#7da5-|BGo6k=j<}F zn(g*=qyPrJdLNI!IR)5N(=Ld#DQzhdm}(HCoCv1-`U;~%d`)jtRQg)UR-E8}WGX^T z)1`SsTrGSRK3`4}oB6%?%9$c6WapMLGRZWe0V2RN4ZE6ifGW7Rk5kBxz8lp6PuLjs zaVjV&818zxicvVWy3gPX4Q`56ojES)C{$(6&dWHO_kA_kT7pDI=5{Cy#|T>2$E~PC z!s$l(c6g7SosVE?fT(Zd6l!dAje5_+axF9dZE1YN1-Fpg*ml+Lu|YzBkW}~^gyDL$ zZdkQd9*jy)QUu5A#h}!`Qn0!mdeK6cnP|5JZ&L5lajV)>iSpE}+;Z0>Swaa=~z|-Srks_z0f;iJRE>A;mAYn*lg9wY1Q{h~g{?gDp)kdDjDHiAKiWL*) z62XXAF>rsyCmjhw^{frH^2?)<8`$ekDsMzvg=ZFPm{ZzGfd$=vboe~J2kaK{xsMO(NYEpvh2O;KTV7vX=|;B6^o5#{UnRa;4Ld!Uo^kh7am@Wt zUwt#Pe^nOA2abOhf>SdjGU(WeE7VRp(QNg(8;-=~97~T+G?i8oE%Fq&1~2usq1^9S z)cyKnRv2mpe;1KiGGpbW_mTG78%Qp$&*;g1r3XtZP|g(<$t~6%apE5yf;ov;0%!pu z>s}&&UksbEEN^pGpnR%N{VS+?4GpT=_HYywGin1+&k3Z#2HlpF#2Yb67RD`_vPqo~ z$;ri_Tnn3q)o>v6NlDS`mqV~X%vEk3fhGNV$V%|k9j(6@y1)(!ATvYf|xD8o>NlEXF&G$E|p*4 z3TVfZ5|sS@eSr#S>;Q!?jY*q0c?KGS{?Xm^0Yv)-09~D~>8_>D!UX|#qWaD|CF$~V zx}Dg{@q(U^Oh06{7^GoFab1eQ-^gwto^g_6=o_j^)E(G5LCu*>Hc@!sLZ7aGIFimZ z`Lysim5u?rx8w`m&)u=*iT&dIxj{qgPJ(-9W(xe+Mi(9EDK%9hvq_cTVk|&W6MIhM zUodL%b?6&b(UhT2FD6=K#Z-9mWvu+yiJHXPmHd;O%|PJ^rZ^!^dV4DV)_-2lp;02V zN7(Xch{y>FbDJo&aC=GK$PAn{H^5jPM-aA~ezI+~+E%GP+|@1|T1{`586!5vo#Zq! z&diVeV$vTDmRc37g#Xi5yrxX92L{1e%SYgF5_P9a2r1RU zkbcn;4R?Tw&O10oz83F_y90aMHQGAmm6^ARzzTDuZ}Y6;`$7>Wj#z2waIabJUZ(R0 zi~chp(eJfceCnA#*LD*vBBp&6W7pDrJTr!HVd3=%G{W32R7tGdeX(9FUURtg-oRu1 z(s@B(Z1WD`S$h%6Y!(3IOD%V5&rMCH+N#4N?nnNxjquqxmz-5 zRYeVV{bI&3qA7rKmwsk~cMwkvLF4)K;gf;O)EIQYhV(tU(fzgi_m9*;e8|mEo%`u^ z6c(;>uIXh$PwAoh&WJ9F&roaSPNTY`)6k%UR4#9Bb!SSt0B`VawWXwv=B$!8@M{-R z^07rMY?p^dSA`M`;4gidBFGq%~!p&EtodYPb{gZEK^OV_v-|97;YJ>7_z5j zJ)eJbv7yM}b0@!J!xXA|Ok3t7vm*)ka(~UbsN@h36iAhZ<{8n6oak5Izhwh<)9V`U z5yUlLCtW*kyXAQ$DUn+^e7hgj9HOslz~UH^0Eklinl;Si7``9I;YjL&#`QW}ES4>Z7ILDEyju}WUdxK|-O#p9-!3yrTq zJ884}-4ZLq1p6ukiR!En!pBPa3FQY>7+X8uN9{ggbNL};NhIPYn{n9;p1!M-T|dUF zO3_ddl}fLUc@jJ^f!!j=2m))o3jLtMX&Sk-1eW^7`L24CL5b#Tm?fY7>|*CFyV=bZ zAB(-_i5Bs)vTjd=WqMOX8_NrcTAm3cTXjKA99C6axzzq`Arf`PkAPG9xvv)Vt+E(_ z$XiKPt`C7VMJ;cruDTYdu+&BV)H3rj_lvK%;`RA?A(d`zB?Xb79@afB-O%6jw?J4y zdVbAHUACU|N!GuEX^~?VwY?A$wseIb@{|jjrf$%fhvYPMY`pi;myRd*tX+Mc?&u5}wa|d&sCd_NvsnlY~ zhzjYgBD4O$)E=q6+|g3GqJ2rwc1Oube!~1| z$SNv-(3BW&u}X5OvvS-!3c3+NF7q?23{^l0$9`2(9%&1ph(WM!I_y)PcxTne8mKc@ ze(Q)O`1bzT*aG8akF+F2enTuwaeFnTdK=&YPryo!0ku%{#BTeE*x zA>87890~t65P~mX3j#91-{~{kRhMLWbGrB*NoKXU`7-==*l)4c4xy}+4ZlM4oQbEC z{!?3d)3jVnJ28yT+~G)-5$D50*;zdUOH0Q2qdk||My;?zN*O1AhgME-qo#ucupt3| z`~p2HHPZ5`XI0&t-6Xls)(8J$wNhzx{5C8>>?qEy%&O>(q1g1;TDmv7rg?u{6{0*9 zJoMbId>$%wrmUty|AF05UB{C0gz|LA6o$)jM4K9@505wE9gD5jnIbI1YT(`f{=iP; z@xgA=1=GbyV~mJd5D&F-J&V2^M}TEVvQ^4UFz}hrq%&CxZ=9_MsHPR~zpm+5q3hr1mOt~oZ?nLS|=C>^*?(mA@*XC?w zYoaK`%k(z>ZGfWOcBJD(-y94mO!O;QWEjgYBnPoKO7veyl9sEt^zCG8hT)nTsGQ{@ z`dXtpjg)RHmEs^-G~}?O*0~UWsR7D{)78|_hW=^2d6@URdjfSQmLG<!@2d%!ArhjL{U1vP`3BeJ4@lwb#T3JH2El|2D^4fx(#1vdY6U%koH z1z=cL_cppcABq`uD@coNd68+>pQWA8d+=8I?Qpea_^Nm6&3eBI$m*NtemE3pS*d@< zFeX!wVD`P6h(azS(mk?2On}OarER4^RiAVXHLms4%}7xmWyb3$=d>2Nb}Lo#&FY0f z%e?rlH+$u5Lurlx^`pd^P^Wlz@eG=&Ou_Xy0~RLimSaO*l-H4mnnsIYci(&}cER#l z=r*}r@hupBkb!!9C#ZI^UBKt+0WjYQA9)D2e#mKKdmYUbG?|4-xvnP|2!5zud9aClXp0Nvb`k#WJ^x!1#l@ zw&Vl^mXL2)M3^AE#KzZkmSOJB^PLx zN>d$6F7I8&cw0v~o8MdV;TqYTLzav*Y%!0+aE8#fBJF!(XO$D!MA0R)`Eo3(#D4?- z8&5#FCc-3yx;od_wt}kpt0W}E#sv<%cxY*@od@4IZ-Z$!6-ZydkA+Qsa62U^?(ExoAO3CRo+={Qc0tu&r7QacNLMJ&Zx4OixG z6wp0#_lkcEJoYZ6C6~c|4|G_)iZ45VLN}}qCyk%1@WaCgSTiEZNkB_u^AC*4%J(T0 z#^^-gEaDffyHBE=t#b`&j+6yRf>T_gQb=>1ZFFdkN$IM52MdDpdH-@sWthxua5PV& zQR|b&3qnzfBp`n4wTWu1*^T_~4Q&n+Z)7E-%Z=8XJ3z!Sa(rSD;8@N5I~rnU8E~N9 zlq_LdHU0WIGmtN;#KMu)J_UoI7gh}uk9B(}DoafcFY*JM+mVyKa^nLto5NnItaeGL zMs266_yj1syNTXqZ=_|(Kn_*8++#N?JVm}*HJY67(Nj!D7U^>k+uGuj!{(y=`K5CLp);+qaX~&~|=-#x-<@PQJcX2X)&)yl>ysDlXq7 z3_Pw}|8CB&J2+7L=Bfo!5#TL`M3kPKK9*-{3HtA4PRqsTvoEBDOe$rAWK0mlj*YOiqhuxjrA{v7Z-k|cw`WH9Hx3p zWFDFg-^Q1o2%JQ?0KKPBxV{PCzoTx8Ys@MoSaRZT_qgA(KQd}2A<-9O?RUPOKRc55;226AyE*2@4yPREwkg2{;bCS$$W{s-J*wA~r{ zVcRX{WS7H%;U`h9qx*`1o-%jOb`8mkQeIYXE!A;xi4NR(ZJ`RX(vx)f1SpV`3&WXQ zy0~Tdt1Ee$TsKoFjU0OYt?{u zjJRVDQ7W(1Aj(4JUtLTKEiY!(KXkjrUg>di$a!`sRQ=8O1sM{%D`L5vo@D9QwADxL zYL#yQUdpCI^E+mmal=hB5UhKgvK{oK8Ko~-HNU6b-4{I<6Cd#G=`?Mu=Hat$M5E?l zhKgcdeK3{T#Ma)5(k1c~IzC~c|IC!b!V)irvgXs3x(1()Ji*LUSovw+p+2gyf2wvW zs)2gdNgl_i04e$O%ne*)M$jg?Z$a74h2TpzBcdf}PAabQ(qDhP=HfmT7T*ljCn+fu ze0)vguCR=BpA4@6$&*Tp+nXac9%)ZK1?P$=(Z=c#*6jtqRFly8)l>~{vES$Ha)j^P zxtlbMnaiygxd_OXbC=iyZMFO=k&@x=1`X@nng7nrJE&zGLa%f8kAGfCvUvNlTN1BW z>=&`!vlw}gMz17OwrMhEtvB4R@wJAt#E8PSHtVS8TgN_Ep?!f7s8Z#K&;_*eR#vme z<=o4-tNCc>r5tB*YIOu zt=Lf&A$Sw0c<8FR7ZupKy}*dTLrI75{L_r^7*}1Ly`#2`Mw9}mRFAS~)6g9p1h{=X zy)Go37|I6;3b@k_P4ZKbQQObv!AzBb-wVdR^;9)pl*x_wb}e=JT7&#lu@RcJ z15mJe53rD_%*^PNW5KM^FLk>Xirhf92vl`rVvNk4H(lX`b$*-ObQI=lr(N&?M!&4OeJHJ`pFcCH&0#}}>{MdPjiE*u z!1&i^-My*g(nH8`S-RG`o3MuS@%v6{7dg;9E}>Qi>lhJ>=j=&biwZl)okD#!kB zCx}3^dQ>}F5RlvdBln<9sJ+u74rb@TIPxuJG!@H5!%yyC>$urMT?LWroUpTqMQB(QT;$2iG7+ta=6Bp93j7vI%a*@0& zouvC_CfHXdwe3wVTUoU}6^-2o@9jwW;;_^E_y^?spNg+z|wC(c(ae|Y0o9KpM{6eqkzW#iI5sUz@Js;-x?QTNlLmMo) z>$E3HZX;tvK=_taU#Zo4;f13FgB580fl%3-mIK zSSVqokOP$M8qgPu`8X(3I})O->k<(wW)l$%&c7ZSy2RUqKnC2l297=A_qq}O(eL(s zZBeiJOPkE)@ZDvWc*ujhqgmg=CHwLgEZXb==D+a<@aMH{#Y;oQ^%0zgfpLxRjR6GJ zpI3C(B1Jk@+CBM{B5ih`x54`7?T;QvLKvIgs}RpZR#0V?Zg5{I;-4}tFe1)11f zj1(48+)0BepxZsWs87CE_PIxt{fR`jF=Cbz=Soo9`^%K2>5zchKVG&xZ!Ex!gU2LX z0$yecMRqlmMq*Hbp!PbNXcl^UQZhokU@@ipNV|?MtT%V!NymVW4Cw05@Gid2IYQ&V zKK09)e#_bj_Km9@#vs5aROX0xCz;-;a{F_Kx|M58FF@1Xd^~r}t2><8#sCDK^^QPS zSOW*zoMwl<@L(4EmkK+O_>3loy!snn0eY30McJ007KC6v6Qv=HeDgk-vGRv&CwzajG$Y?WY zIt1VI=__pM4))179?O5?(gLh69@_uZNUuMwe$>6A{c6#rH%mQniC0MUn}XBMbvt_B z4Tc^WTVhXOrwSEzh1#q;S(U`lDL3d4Dd*ds&ML)9cJ)LWxEL0 z@EgkSd}C&$(0h!uC)ll};w|7?xOMl9lbz)4AE}a7FT52S)1dldT72ugGck%oVn&Cx zCOiDRfgWOA>MPN;^T(-&9tGFsAXyScwKs$Ey)Q zMFBBc(udHtx7OWkEr-0d&=u5+%l>7GA$K?Xmb^9hP(kxHrFbi98kwGkpqV87e^{;G zi_2W}FA#=fu$N$>)MCm66!hz76)JF8E*aNqpJSS%i#4xWiCDH%Hwx=4D&z}xzFLt= zd{;mq!7q5J8$LGVfx0RY+?Y+*SGkrRvVDC1aoqy0!^`8^46~!9mWH&PB$xa5^ONN3 z!h9TZ+2FO{)fr_=g)sB{|9&Ub*Erdc?u{C!+P&!|{*fG#-dOOd1zARldXI3?z&S@a zu|HUgz!5c=cca}tubY*ris^nfC51lDHHE_f-5wOCBDA*O&#gCvkp(`XsZfdq@k9s9 zgt557ZL+AD)7-bofbJi;9C27_$n>ZwSyT*fw&#-liNMo9^)*TkUNc+?9&t}*nS7b< z74V-q+)kNLO#LDBBA`C_^OP>$iVVt4icHHRTRvf^uUQrr<=`tdflN*@C9h{Uw$Gng z-~qgQsGU|rT7y>M_JXbCTtOcj=89{6yazy*m$0VJaN)?1=R5OUcAq&gFzyJ zDa~8D>d7Srq*WifR&}{JKd*Z z)Vr)i!p|#k>_%jf2jX%Tpaos!;i`MnOdb|mDB%1#e3NSFC$CYL?+Xvjzbr6!!1D)7 zbcYw!>k+lS)~gM3+x*dGWeT7tssnHAHW>Zs@_&B36x^U+K?M&?khXajyuNQ5BGe-M$ez!pBb0>bpN7_H+He1@^7C9h+zAj?n_jQpN@+(Js#(N*50z2gPMuaw$S*RpaC|M(@+h~rx)uEyL zRDdw@E0_vAn@B$WHp{?*oRHz#9fwnlSCpusZ*%`iHE{PS|6{IpAEJ0ZcqX6=g*Qm3 zo}b)aOq*P%=tUaRpB4XzSBvk~6y&zBV|ud>W&kxt*Xo`$}Rk+PEp>O-I3&i&mYlr0cM(HcaXF z`~faIMQgGI|8Z69(z!s9@{|=jvNH5oX=Y!qGhxv2G&>r*z506jIlE&{?Cy!Ht@VgY z);BsBi5xPcu*{&^Hp^Lo9;m(r9cyLt5%q_Du9Tv4qji9H>$3k?SW{=XAd`?2AMjqlLH(0mtmEz& z$gZdqNho&qP+w~@uFpNkv=>&ZZY?$h2UA1L>ha@$PB5ImS!(cyvPaH2; zssXLb5UNoyOHMA}J7@HoIdf%54)T2A5VGsZKU@iADY9iDB<_C0Ro?aqp-E81ce)i+ z^KRuMG|E834Vj+Pv51;4W|TL*K1*0*hh*8~lnZ=UR6mg+H(K+0l+{ zf^l%MAKa~%xbAlcdBH#7@;R2+jgjpzz{!w7Lh z6XWfOb0biu2Af6|4iY{9=o>MHC16=%|t$U^LhTyD~TgSIkSSr;Ju-@18Tkpw7;*S?g`Do6%c~LmN*(3)f+U@y$YM|X35FtSm zv9qZyi7FqW&Mz@DIZm;J)!d!Ie}itQq6o<+QI+Te7Z#!}szUsH*MiCRu%BZDlrJqg z0b6i=2Ppr)YdjQMh*Jd4Z-36S1~hM;|Hl3F^u*PZ-#$5Y=eKJpL4oY_eLR(^M1_d=*4p0|L0A+z8}uXy;Z zYXQ&F$QdcfYniO#Eh$9|AZrb`7wSl^?^XSCH-27Oy}SjKVzB`7i`&IMB!`fz{JG|j zKgbKOJ1`BqD1Jk&6()nNRBCK;Ul=Ly=hQJWGx~H+^1*#YS)=RKYZ04a(_M8DNQQ=e z;PC3aMLe%;WwEX6&aGpNyD~iFi8a9^$us+I>i#}tna);=Kk^IS$c!l7gU#7JEfeyq zU2`{>CK;~Bp;lTYI#Jskoa1O+zlloRpU7Ut3n8$((fu2@gvC@_Q%#}gX72LS`}^iH zkg2jhq}MnQXvhRjb6$0;naW!XDCS;YSJNZOJ(r`lf9|A7DYgl^RH-E_iN3b;lx6Pb z>gEt2EKT@6Kthyt>$t84gq-tYPKpxyPQ^(vrZCknp`San>e^^Ke~aq$8UHX|Ufmt40#Hkl?ja}@1yD<_>|BJ&Pt0z>BH zO~{<<{y#Q#pe7_=tvuKy?VStVG#x)Gfj$TeUe7ij^Y7A#73%$xReGQt4)9R7ANzEO=XWRF zAf~kKp}x%fstsPUN(zml@^PbO@)>c{Hh`>j%d#(GcbgTHXYt1IX`)XJs7 z-PNgrKBIAhIAsPwE~8IiHX25bQJ}K_dE=JR#BGK#Wr1-Zc0ko`;kORGMSq%JYn)`O zC(4A@#GjE|jsBgLFr@QxX3IY%;zm0=H6fXw7a2Whv^zsL_c8f*j(w;jnse z;d66@(r+`nrxl0B*(wV0w}yzw>euP{;H`|#u0EuXV3u2Jxb|@!G|^t1O(65ri;y2p zu{~J?5)O)94tjDK~#qtF8OPyo%``7Vrso+PdwD8 z=d7=B*Y?s`^>PM$iW4AY_qh4JJE(6|yWNGmb{yy3g%hENVpj%3#EI0n*x%D_GG85n z1gmR7NW>;;)_(B}#98t4LJ#yZil4-N+Z5(#A~PfKM*$#jJ}D-OsQYDGQigcEQTYu%Uf<4>8aHmnO9tO0ZcpH8X&kHJYo^; zG>lp4->*w&2}|4DmDmXV!5i#)AZz9M>d}XJ&zbzE!Dh9=l(HHsw_BzM+Lt3J5n^Ft z-|R^0vcxT6^S!s}M-(;1$zK2QkZ9iSqLB z(1m+*Et_;79qHPSF-cOI6;Foyzj&oaqskfmi zwwx6-4ek;K=66G#$MioL<_|~dYfzjR065Su(7h#juS3hmI#1=8EJk##%Ml2yX^)4L zoxRxp7?up3$eiiSxn=PXx72BUmi@Z=X1x zOMFV=x17pOo7|0?Bu!BYob~Oi;b4x7p3^PJAU5Mn%tX#aI;>dG)%b6_RFB>v2Dwwy zaCuPY+(_qHyynHA#`^`0(lUSVSU^FoRhRtoG?)!YU z7CInO)T(K^yQBEP=ouxSX!pFmQ>lu(mU>Hkqyk@QUa`2!k{;dH=B_zbk~Dkn^`u8) zB2MhmGq?7Q@a!*V)xvJV;coaDe)_Y=wr)4Q8b#Rw)2$O4m>jk7&iQ3*n<t7qsq67aV&Xt&%jQX@|9WnE{s7oKpH#mZNpE(^5$hh3A6-mC zpUN6KV#5~LQWn0#;9}THt#2h!7%Uq7D(*Pg{sp_#P>1KI&AN(lQ5sDv3$+a1_p6Akh`dzF5_-)_JEI5~0l>>7WNsRJ)6bx-zx zv!k>$9K%2!hcCRT#rxX|I>B`B=tVxC^8=mIv3GiUcKK+0+Vx#%IJz!KsdNKabK-jml9GTBN%d(?9c&UXjq9 zt?^>g6D+K{BBoh6RY=_oo98t5n!Y)~jAv(!B zii=@E%xq zDFillrB*7Gi`@YBI-gTAGP{SBTy@5fP3H!Kwj z5A+uW>jHL&9$P`%-v6C0xby(@X1Jg>P!TKk_(@9B-AGZ5dMh9xVzFjUv^VPbq9kjdL9d={f;n)m`I?wEMH=nZ;R&zDOUF=K&rx^4! z0(bMjC;(<-wOiUTbj`bgFTc1C;RCgcU=Ht{^gi|c8M@W2`DeAwrEKkpH6oM#en!d3 z{GkAnP>0@FT%R)|^byV*v2lU>H}XVpXuaPGUWk;Ho`uVacL>` zqGYJRD*Lzp?!b0L=Jgi4CGNPRH$6-z?W(6Z)v_0}fiC0kkv*9I%{nkd4vt0HSN!TN za0K#C0r!8;0p1Y68h&`6DlihLy999CB~rls8~R>_4;r@cRddL8FABx{ydvDN&?=iz zwRhh>f|F^NwsmkS>$tcY?cDngnRyT#)H6k{pQ;z}Guj!{>9pNsF78zOEB##)(y4@+ zTX~lB3&9)zrCdE^dffWy6nRIoI?6iWUU%7S9vde}rBo2_!P6Ba%X^(E&%eXRRHtUP z{6c(=ik2ig*~iI%&&BxyCBoty^qbg!cOrb#2GsBt*9(;-*XY^%r}E+bIO;9_WDT@c zP74Cbn^vmVb4@BAOSLvFPF1w#ua_UX9Wu+)?Q{zTuh@z(h))H}ma)M3Ln3d9jam2#z zarhwuJpc2GIBI+LX2aq_6*6c(>U}mDy6FKNQRYyU!6S8ZI!7+Dr%ZPNK|>&~+8PVr zNsQ79&%X6b8ZZA1TTx&zw>`0^HcjvGHT~;y0&jxFR62J={AMlR?|59QEs`MVX-&fu zeb`V}{3iG36)L(y$KU_;qz{RWJJ5#Lp|hZOgpSKqZ=`M0t&Q*(+%`HHD-&_@BerCL=); zMY8w6LMP`n7wd;;0%U-pg!$Z8igX1E{5lRf0BN+QPOrVZ^yTd9%~~-txKS%Z z(t#y6iOlQn{%1ZM?A5*iO6o%QfF#*egkSU^cq5SJteo!J!16xPfz9?X;sF&<{m$E* zzg6!Brv5f$?YU~wR5sI|)(&CFnG zCE0V@sd)4a#N4H|pxNl3-gfsM=LJ4@Gkkp*z-*qBUmz_mu#$2VQ6mS&zbVZtkAB=} z>Bk9}p_vOwG0~f~?mdwiSYQ`Q!uCs6IF7M~oLPolI0Fou6D|U@c424P0b9H0hCfpI z?Ud=sGf~N2zZwJ5ShrK|Dy!3kt?1HzbqpVPret@7t0; zT*PYq>snB9{X_Web%HCQ5BQp@g}jFbX$*($`yc5XzqCm1r^2eXKMDp)b|U1TA9V#g ztr&H^dIWxa4dvl}Ie@*)$~jT^MXD*~VYbZeBCcmyy~XsLJlry#bc@wq%Om-=mJH?4|+OB%ya>;^j zZwe4Q#UKfRV4&sGs5EoQQpP;J(8~*Rta`^*e^M|Ls{0xkQu!&ZRPDhBYD_+$fl!&8 z^~WZaHukbxF3_ktCgX7IM%vA4p^;V@KqSI8^PnWrFuai6d8T=N{@7jS*1tN~tT=?S zA1Dqqk3vi>yV`t;;QJ56Nep-{2K=bj z{FljpwR?si26@CVfIape*M9TQ$;AHe_v6COpi0&|q%HR79xFcixTcVzeTj_vyfMML zcHnvx85?#Oj!!|m_e`6p`wcW?i-h|uC?Q*&_SOIW#2uTv!VFp{b9Vu2-nVIp{+9i? ze(vjtdd3u(@3K2Tkh+rU$~)FE{|_zM&w2f}_&8>wH|>_LO_|22@HO+y_;|~3zDo3@ zfMt;CWZWM#x7DW~2c7F&3a2}3_p;>q3})A*LML-J16n7Moh z?duj#d$$avYg4!q-1FqMgyZ33rgy8jpJD#hzEa1a9XkBg_U9AEh3!gdjZ#QM;}!*R+o;8z~pyv%^*yIr@nV)dAB>Tk=J?ypC`@lTtx?Az&%h4TpA;bi9L?BM+d>o?E%Ocu?d?37A|pU)2I-aCErWn>on?~Vsdixn>kJ!&_^0)^~D=sx|JR z>4I~L@2K8fA+&ls!gWLt4%Mqf=+0;^%mj>&Y3BV^ey^v-;p-^vbs7K7vmsSYRQ~Ix z4)^D6l{um^QKJWjl|Qe5u5*Su+io5O<{ zI5rnt4;^NkZ0HIBvv()(pXRgeqN0T+^KunyA+x9$>A$DFwRXQkY9ZTJ$JRfuD5GV( z8rH^eY(H8{GF`_EIb3rg{L$3fiHrS%rRgsFA`D0{kTCChp!?D$ zY^r#??e+V$Mr@YH#Yn2aM{`xKMMQ`74qtbGAQVnc>g~utydk_Ml5gO+g(3BBqMPdS ziwb6e{UX!72WV)CDIZp4nnadFDm2|dfEpoH3`yIwByp$ThsSSBEzSX7yo%EJY@V$) zXi(^P;D)%L^gyKh_XQ8`RJ2H5!<__F9PrvgIz#-hgi*fHssKzCc1JiwO_iy3vzj12 zwNmf-ffti=?5=QRm`nP2{2TL9$4dt0xr%Hpn9v$Ps#yJ+5wjVq$?v529V&x2$DOJ` zL4|9P?_;hvgBQ~VEzi{p>AAdm*ro8sD%l7HiM;hgn{o%tpZ)p25Amh?<29AlU0!8uzA z-qC!7FVFUC zOc|jXml=Sdx{4|}VcESpN^S1SryFFKk^PvC?RAH+mEg_NhEL(#e?HlK*~WpvZ?2}b zQ$gzMXqL5G@bB&AWzwEcA$SYjbZ_Zxnv?h}EydZJMwRoqWaBCR?%_dEcFC-6oK`sQ z_^CiR7-fITdLA_Qel=T(5IE}g!VR#?Qia#ca?}I&kcOF;(}tB6`#{CO9@#KY-UkvP z`|DWSsMgy#amXNYWEL@XL6maVY`e+(ZU(I^DV)is-fH&@TDDnoa6Fyey&!7569@~c zt70>>?Pm9=KO^@b4tv4-4_Eo|!OXqXiLoC@{a&GPe4!XxZ`$(muP%-1*Uxqz0ejP{ zVNAG7ows^sdD$9b{Q%Yjv0GSN(@r`1M!%Q5OJF~LoqwZltLD*yea%#(ZYyv`zu)m` zGu47SbZ0kT6-aTZoe{W&2GsiOmR90)*4=4+TbosMyKxV@0LVX+wx^-yAk7U&kZrD) zLS>strYt+(ziL_&4NJ8fhykuxJE!_b;=)%$BRcAAbZ)nrHRQ!>uYRJ1S37%@axK zIpsa!4QOloI>_`vi)N-T(MaXMAU!0SEKgC>Ab&$vp;wzAuDuKc2Utdjp$8%AcnTJv z`hcuJ02b=~CH>ILDnG_%zKfy%LbPdOs$N+=DP#&?8$KOkZsr$d`4>z{Ebpk&3s$u5 zHc?8|-Aa@7=zP9infyQW^87YtyhMUoy4$1ygDn$!;+RWPdlZ(RUgzBux)}w&t$(05 zar=AP*HK=gK#>h*LdL}(@MM9Zj*lxgkpII+mQ1b)R;Ai>@(9gXj|c_imf%B2_$<_HdiHVbd`9PvPGg-W98So+4jh4> z{zYgxv|zn$STOR;jtI8wi?ZJ-P1gdBWek&U0ko_<>}#QeDnOI08`KyGEO0I@eEsd1 zGm7WqH$s6JuHjL(mv@6u$H^x2`nN+17Aeb8Avs2 z?ebgzXL~WrA`93#q7*pe_QgATk*>?^LJ>$kjG?g~|5qmfS{2x6$X8zOKP8j27l-|V zS?Z~G1PzBE@)>l4gd-Peso&Cz@@BxalDH#J1+6r&FrS7>0)Bhon0}DLC?ZYS)d$n6 z$8$Q6;Zp!X3ua}YweV8BE~Wb7%U+%6X2Uq1@3o z4T7Y1u|9kC!PAkCj0)QtE5{ijK4l~#_UG8nUx~T1jV}`6wLT@20s1_8q}g6U5W? z5{IqGitlufTelVfJB#12e@y4%9 zOX)hwwdjeh&IQ1&ZCvM7GD5rDu}t@A?`D`B5D1sY87ig)Zq(;XHDtg$Y_L@7h0TSj z{H0e#la`u=GPul+j-4F%95ewQdK-Hq0m*S!BG1S;I2giOT*b4qS^r~?Wvg(cVvWYivK@&RS`@XD%os*4 zE6M<>3>1}f(p%%{rNQB&;2-AMb=svVi=I3C$~Glifi7vPYatm*KJWZM?oBrzj;Q^p zjmg(&c+_0_tDM4Hf#^G*E`L<)b%~56bbsd!bp0JEKz-OL#9srbty032=H8(Nt!#jw zSFR`RcW06J}(U)xHeH>@=qeSaV6EnVNQ~0fwgv2TlqM)YOwEX z00RLZpvd)Rc9u9-!GJk-P~UcFaly#w7-=^G`12q zelct?u1}2*S%Ew%HB?9?M^*e`!sf{Qrr|nQRGLN z-4}n-Rl7`b*c#MQBJ4OT)-9o5X#TnSovIZRS^Il^MM?gyHT*!6Eu{}pJP#y|5L+!BowxbL4?Sh*@AM|;+`clS_rlbkcr z_?vx`1*xWQzw16D*}=01{AzCF@MdQR`@oPi%jpPjD$;KM@nP)#oNVVm-xpr#HACMQ zEM;C696;Zc1BeHK3d;2sA6EIL=e6q|+T%Ne>hbf(ITwxV1giPBy=G87>iNQk?aS%e zh^=adVI0Fu$@QYW)Aj@ns2V8NTjhbBaZ>51Ja@E3f$eB->io^-pzS$w9XHKy{19{; zCVFlHrPmM8L=yd)%Pq*p2#glOmMFG6&l%mQg`V{+r%=}@n=Kb0tZ_$eERN?c4#C~J zEHc~PzRbBmmj1jV#&`e3eBi8O`s;lfCT(-p`Wr4ioIZWL&)a$A+0Hq^t^ZKL$1ImN z)!!iFT0^AZAh0K~kD5Db!uHPF*CyG1S-zA1OXf5m`T$qSM!ifAMhIfUrWXF+6lBN& zIgYMrmb`=^`Ih=vQ}lyFap?ag7fiJ#t=Lx;F1`3mv!Ketd6A`Rnwcx83JKhBlG?ed zmn&9ac~8xUW;;GCTV$A74)JaJdOlT@v-I~ShAqG&e~_V9%hsCA7AUq%{Xl3%d9H52`6 zIntK{7V5-nnucP1nbup1pBQ=3LjCEKAuA0?;09QwFNa%V$V=xK*cMPtp-ln7tlQ`M zv>@s$B@<*qL`3fT7Qs8P`&-}oW~&nt!r3!g8JrcyQ4nFx25wVpI6acyf9dFr{v&^i zaZ6#&yFF#|ovL{Slc&2ZnL@2JYqUaY<^{H|Hs%Y1g@c461ux7`u;tsYbF0gAGB6XY zJCWSF=S4rPSV{6rLFE+R8!geV1(@y;VoU_K2|h2@TfVFkx43?OWJrM1qQ7KkJB-I} z__#{;ZB_GK&At4EJXvzS=J3=&qeyYgjK*7brxnT>;+311=KlzI1SwW4RKu5!xsDfa z;$r`t2bar%@n&k8iVGKRH7gM$UX^cJoa){ny%=jVlSSy1N`LQ~-sYp(I77q#BQTh3 zO$>|KR10aR{jmo-U_ z%6}`Uk#QL`f=frJXhyHn9!c@`pcOx_%nDqXe8c}K~LoG9{~d z8~>E(!eq63*>Bv|4RR{8v&)?Vzbt1PrMV^VqRNOL?GSFWi(atRHbRj{t#JjfS+N@K zY-on8bgzxfjtc;M4tzegvUe=3z0HhpX+XdP#o-(C$18A6^YV*<;38Sd)Pe3yI@_I| z!DmZE>z~Qt!+tp(T>N>(^LTpIbFpp7i}cccu@9Ow^=SVqFKSBQl3O_Tn;9ec3pS1O z$8}MX;szABeU3-*@&l2y>R92d*0`oEgU}g|s?d!FI)`Gw-y66r3eQWAe*EQRx3J2U zR`w?_wPmSb@AzT8CtvH+-GsXT+yDFa6rhefCw>dLQMWq4sH4sF?8Q?wT@@&4Rk@&>wucI?BA9!%qr-GrlV^+gk1Dk;r|3o&IeuL9Se(nwQFLBe;&g$#+0XZtrQtZU&j#!{mcnw1gd^o#)&W$wjRLf7PNzYfs) z6dMlp)op>&4UAP&QV~ta&1N(yen$dis^dywXzCV2k)wIjWp1ERg*v41_7CadUi6Qz z^N8Hr`=sGq?&`GST(ykW<(D9r)0-v^D5?!8cfeuZ1zziVdp6ESuc<^SuD1;Pv8uPG zvLa($Wd$vrN^>bZ%}_i@n^|LrR$LnJ+L6SJwmacR+sY(s9&ZYm-8kA7Eop}L0jxy!oM00)lQC@ zU3iI&PUE&5xm-G;2B$i;vI9@wrK!UTOFj94EASD=uNUz8$3!W_i|6&eF{*f;P2%Vp zDxut2rOh-dBku!k_TwC4z!m$pdrFanuns%>e~H>m_fzQ}gu2`8TRxN7FeS9jlnucN!2nt19BBf4;Kc6AP_uI zquxK*J)lZ!ad*S2$h%8l;w3&7_-E>-k}6GwXhD+_JqMgyo>VG{eZqU9&mL!)=w>1} z8fJ|CYG3MKtSm?m!$$&~8(^LTeT#+BHk_n+=VLURq)k`Kf88Q5LoE@*=FOl<7e-mN zBUzdY*w_}PD|yI?Riu-AyKdrLz(qFlV82&j^$iNLVQC`$2H$(}Cran+)XO~j4^Sye z*kV4@?Z*^ns)vRHSmL`?ev{h7Md}Xp_GM=w5(YKv8Ued|Mn5XYyeUpiKrKgD*FIZQ z!>*N^kZH5%geBd#GLR5c`94r4`tdXahp2}C89YyN3(2q3C7e}bN=rqk8iito`q2hk zzG@M{tGVM^3a_ah+MU7>&v^-|ie4G4zK<)cj>ry*^iQ_oI4ryD|4u)d+9x~_v5OntC$UH zkJS1cxww+8X3#|0S2H5>Mv*PpRsmve^cc3 z{kJ*#C&4MP#psWG6Ev8`cY9Ig+Lgwlw9rN1cG02owngunixuCoNk~rQ`q%e+4nN0t z8!%`-`oKzQUzeoMQj${nrdV4zXSzJ3c}n{W17ru zWAM~Bo-D{C-$=rJU@W0JX?JO9D$6XmZOfGYO!%oOAD%S0Q=hOqYEC)hU?90 ztd{?5V9WxI)=X4h(;Jks;6S+wCB)q)f{cj0clpIzOxY#E8KK*&e87j9bIM=2G#y(| zrHy&1*M}GBc84z2qhEHq(TYR&Z$ldBu+k?<*qH+(Z<*DP2lpF!n~;(1yw*1SKcp@} z6Qu76*TCX$i(bj@LkI%zS4nnuxFdb7mj5dAD8}9wLa_KsmtGtIUFeJLk6tojEwSVQ zPJvacpm!2)b(Wyyn(jY1X@(C)r^>E33c5;%$;Iu0FYWF1A(=DERJ@ql-<;P|fx%%b zzC`P87Q4-maiCwZ)Ti#Pa+<}ha8eHt!=vJ%wfY}hTTnsjS!0kX+8gm# zia%zN`r!j}*Gz3(x8g`eB)Op&ZrCI7h?7+wn`8wK=auyUGi!Tib4)9E@9o3A4Qjtk zxwB2<=e2-IUlyuD4j&(U{@e6daBR`tizCAWaHr&ZD?YZP@ibVkTYL`F6YXMFLbYRM zw(1ul?}d|r##<3vMkPg!vepTGGh#zfr96O;}O?j zJFCKuA*Zk0kL%WdzR`W%B^rTvNB>Z}f#;{9TK$H5!7Z2FaR`LHJD7v@wv-O_zZ$mT zcT51E;06xJ!0EAj>nFN&kGqEfYfr4SN?_3$$Z-8%ktb0 z`DKq*GzuXjkV^w2AZjVAnGxI0vl6 z>$7FP5v6S-A_}VndE1+_+Ety--mO0}I)1&= z+uekFX)!!BV4g<0^>!Yrc!H8yN{duwIrpCZbzx#Wv2~g-+VZ)O+Rjrl^uI3^#L^`F zx2Essm9x3Dt>^Q{G1B*@6c1wJq6{yMQYfLc_9QYY31+WQ1V$Il`e3Oi6O+W@i&S%0 zwHfV$RDG80dMwl|D9NV$(>Or?+ii61p`NV`!fKcu*joq-pmLSuEP+%cQ!nZNr|3)^ z*-qQGJ>T;@vvk_(l-3&hP3=Y0zBKrzEgDPIzC}zMO9>*0UGPq)rMBdekW>VtgsP%; zK^SWqX{7d@3W}$zs$z6K2o>Rn>PORfSy8f@qCDUq(v%X0hk#p6!uhXNC*{H& zQ||eg7WwbBY|jXIx^3c)eFtmLP5u2^k$pDzhd2CFa68U86Z4>RmSM*uigT!mJ>A0j zC!>Mo4sSjGJ>zqwwFF;sRM66Aev(Gzzr{jkbjg1bV&*LSPvqR^R;qqfYGzsgnWCh} z_wA3BR~g@4v8xgE5@Pm*wkndlP532b^>{N86u!M%WpotL&yL*d2Ynh03bX>GT7T^_ z=9|38+v3ok;##7N*=3T( z*L)1%qq!M*$BpU`;(>TN!%))J1{ba19&OueSN5-%P{*$X;z;kJa$lGUA74EK6R(Ui z1w<$+I{s1KFd`F+RijNTGut~J(%W7=!o-akWYo?%wbanUnoNsjj000n0hrD>+ml%H zfm~+h$&j~UR3A3ChIQV!U~#Ss1SgisoE;>M>aXIH5fKpgr-`k%)%wLzBtkkW$^IuK z#pY^DZA?ds)!W(Mlq%}r@Zi^QxTR)#%FY-##+gWdo#-}x;K<2!GISpgC2zsWKJ3}B zrs%4x3opUjGppTK%pAG5zpO@@;qLtGF-)dcvB_f2ly3twsQRP)-;$0@_4&i+6UGha z=TA3g+NTl)HC~C#2e{^lf=Mfl38o@H|HxFahTStzuI0CH)vjm~UcQvZ960j6dy7hV zW^D08Q-US_GCz)(iQM8oxRiSyS^l*kMbjW6WN8t6C1Rwq$v)ck;6Ak=dnTX}HEaHk zWc|>7iJeY%SGAY)Z|(GW?!<}+j8&Olxw9sHLV0%r~rO?9$Fg2ZmMEJ z3~t|XQW=pYKeo*rJ6u)CjS*ji8&rmzDP$aHIQ5W7xF0`mk9aEcw*S;pOitsolyp|$lNxQf4aE!py&Cd#*F zgS)@v%YRyBWwZ##Jbfm2mbj_BlSKFOl>OERF&|0_makQ=eq9(lMP4;|{3|+oU+N~w zxESHtkrPM3sL_-UbYu8LB{W3q5SFa7L-Mt|zbIJLQLpg$zk5p^2e$0*PYkkSmx`y+ zpGt}g->es^Y9{FLgqMEqH-03l6smFK`y6zWC~vvK_nm4}UJ{C}oet@QOy$7T*o58lDwdGBUfN+RyYq$ZI;u~nOjjhP z=od+SaGf66788eHv$?AIF1m{xlRan&eplDhudnQvb? z)9_C62A{tF_@D12MA5Vc$kYZ=vk5(qVtmffampxD4MP)=?X8rBg>(CQYa_AsTN0Z! zEmTT{@K7%)az2yjrV0#cR#Xc=fmz7@bppHWfI~g`{h#*GG)EiLpawv$T;WYsu(d2d z&D(o^N6bON#BV)FTl9D2xdzudPjq6nM(_*h%4WmFYM1=m%e><+G4EErY+5W4DuJXS zaOBtVSFgs!+ssrUl$Dmc5)oN7yr-?T`3>BY{yQBmE3l;lsN+g)vy6Y42TYwH-A9iC z8c@Q6K?Q6rf5?PBENTd)d3ouv^8o%VdD3=#p!Lny*5U+TRnA&#fg$W}U0Iv+#OhFA z;FtZ}U4@s?HBCk-w{brUmqhwFg-z;lt+gPoa-d39a?TSwbbi;LS?Igt%bpn?``p%lW!S3#7J1IHIQzKSTiDaJv_$QwXxTt5oh-GsK1g!Su9GtpG9ic% z!O;BshIh~g+0ZiuAEQrA`&$TkA7Cj8vTx9U1920Ix73`mLmuO7`HQalBFjFF@#eY5 z0oy~}uiQ;FPAh5%g}Lp2mmVZol_NlVO~raWP0DPFKhI0AssTr(%|`rIS@6YP<0s1w zbn)#0YNL)S@C}MTGAwBV(V{i^K5LLtwaMBDKUcB%wxLi+@w{?YX z&u|-i-Myi-s?2>A;>5;rvT?UkNlP8!W(jI-VKSe|YtY>yoTt1~%x_6}YvY}4fVO?7 z2f8YXKJqIAeL9}0I-^BJ@FJe*bbF*_MOD3t{~=nlTnI)_jb$2Bj{^#mH}!~j*FFnu zt?5&dwHMmMiw)G8{EKO5agd%&Rr*Q<_yxmmM$X|8$)I9knR{81Fwk}tPJR<)e6|&} zlTOJ$co1pfR~2(95OdpeKNWRmi#|FQXzP9!t+lc`SXHuR^EJAQNdZlbY3g@rT7(IE zThh>A7^}%E;{L51mSVCKCVz5V`_v?GQms1H)R>n$US{0DeZVulza(;V`y6ZpUFoHl z8|GMkSQ~k_k|7-m%?EaO17UYvz4{!>sw#s-&A67ZHLF}j0l8Hp<$q73(HgzM`Xk08 zS?Er7WBq)s-s|N;spM*r?R&WZ5teAV`Jb%PFew$-kLF0FqVI)`Csn4K5{1|J3)WuQ zTj--av;jX>!r?T>e2J-vTJt8E4fiZVPb)pcOvz1rmVni@n9*3e8rS;O7%0!%4;d-YfbTDdoK%fOO6%*(HtFq7DNVvIds2pA8yS{h_Kt|D9TL=;(IYY0_IV zTCR2HeK;0sjLlVku&1TeV&SxqK?jEwk=$&nHFdkfv2_rwiZX_T^i)8bwW{7zvU!tw zWC&E>g(lsxMs7@I=yj*3(H}|=?K$Y*CA*8RIR?Di=2a;p7_)r$36Hr8`7x#U`?ULn zJes>Y<4${ug+#LMz|?95j9HvOA@k^yvqr}vM$t8l^`E^x7GfY5dd=82K&zD@r8lv1 zobp4n=dN^-dCU@YCv8rC7*?iwgY!epUWeGt?2*uVdTZ1*y1xv)a|%`ZWw}5~F4-7^ z-pcj9lmehh{z!3z-SPJ&j49u8tOGC$kJLNR`zGKmot74EAhh)wYPj0-2u#oG)Mhw1 z43t}D3LYP^uU|zDinj-!5usa6NZDUrvy3XqtUb$|I}b-p>MDcvXYw{0l-ue88$+!X z9!x7;`i7NB_3A1$V@31<@{igd=g;IEG+4ke{F5pc6@)0n|7aC9~U!Br3Tvs^%9I zs(b|~PxNye4OtJAQ^`prwccoSTw=5JaHz--0?Rem-zy46Ah3RbuczL+S3mKb+}=kr(VhG(gLJju&ml)_ewzY`akjd*p;h3a6I8l0)l3aLL*{hz;2 zV4mm0&Om7%2))OF=5yc)E^A{GmB)|d6ZqqpFWiMC4zUy2KMb~{X@{n0_vFZ=V<3%Le@OK6^LbtJS^;_yHuZA|EzlckSS{{ zH9FzXR4)EnSlIN`l@r=NXy*KJZ9f>QV}$CBA|tji7iPJEWr+?MY)RGbovaN1#4r)2 z?w{{E!9iQ$&w4?7jr&NBYDLFPOiW^2frF-zZIJEs@W^&A?w(_YQ$}P&i(E@zu+p46 z>3Das@59f8`O4EqE1T6%eq>EVd4bh_F)N!PvP{U9d=MQ~POXxLGr^fs{`8?3#gO~e z-Ybzxt854oK@b z3phC<#_C2-Rr^N1W=UfZdWRZL(tO%i$daz^bRvVC60TF7-5+<$B?b%0@qF!W85_s> z(#uzZn+^YY{?wBZa{Je4t>)y)%Xi)nBUVlF=C^ zfr3WeYM}!T&ZWj%NNeOA$P;y4slDSFGfi|xbFPPnw`=+>4+@zpVa?DWClh{P7hLxQ zQ>9!v@E&Y?$0)d?{7z>nyuhhb!Gm$f#$*NvlUMO+<1fV4TJu}ikX_FsW#jl{tti{d zv$`~6{yj40>&uuK{*V1Ti(w~pd0K_T41a{_>(IXtO*%OCFMN~4VV4yuF0GefYpQFO zcL^TG9^dd6VL%%2^5;0wgVCz?*R2>uVpq4yh)#E&Ci(Pvm6J*P&906#>>~>~W8t@6 zK^iW5?(Mtwf`F*YJOy3$na*hAtZB^x{{Q@KX$vJZsm`J2R~n^$O#9S^kL~DEZktcy&%0l-$uRjCIX%^YcRvh76ue58SX3Q0b@-YB&LpG z7Rfv37Q3;!*37>12G}lP2_?HfEeaOYx7AyVHSB zo^x{+MD8PANy$h>e|bik-kqFP&NLK&yh0QcySg&0bW1?e-OZ-4j_Z9cQ?{-f!X2O3T9a*=lXyR~|F&0S5ut;54X+ zpBxkOrC9;DZKHksvCYa-9a}RAXf=>JKs6t(lOKA;OMM^m6w&|)AeugrlECdYc>_F9 z&~o_`bh+gjU`C;Rgo8t^cL|l#S{Kn#iSzx_7e)Vsw#S9gVt=t!nbV9@IwV0^U)5 zhg!~Lv?j;#lD9xrmcDphHD5=|8&rm#ZJOE<21mE-!$67$I9s z=CF zeB%dEH^3wY0vl&L=vAelt$0N1aHPuDO5Zgb@-y)Mb`je?wBC<099Yin1wS;X)~~l3 z9Mbs86uYwPshorTuyFOC?;4=FRRs^qa~6Fy7XB|Gqk!RCv%%DK(MW7BdyO|zFGK5Kx?G~Qz%xETS~LgbDHN=ufT$YrPDOG$!-ln ziw&CcGR$WnG>}N~9xHTwlm|LF@EGsURF#tPO)N!9!MLDP!*M0Dmrl2ttUl7}+3S8}7u7hCQ}d8VqOt^|v1%ufBxJ9$@TN>0*~?OV>WYV@Yo&Gw644$%XO z)qgDVU%zi0@&-rv;9mFr9`2mp?jLtrfZb_^Q(I{FPE|1Q_9wtW{7P7)>09_T*5Q|y zxr^346fi7H2Ty23(z(~YLa=tF#nRniqhsS~G&{09Qf_Br45HW>C-l|xn%;=3P%svS z7!|~>IQ;NrK>JIf^Z2Eaq#c?F0p6R{7~MZtD0t0ur8aeQ7j-`BdMq}KxUWToqa1Mz zLt}r@v&qdKjH~4fT$_X=A$?E}7YjG-2-p#Lt;f$ll0zWKznug+r)zM&SF^qF>RF;vX`zi5kq?^3W+X+PuCnBu zdB4lCSPXAH)HnHdJkBVp9*&X-wYn_zsLU=Y?r(>^SFA{nYth-Ab~&Xy40h^x=;`K0 zJh53o$BrjBiU%{EFpKN-mW-WE|K(1{!1lc58vYKxxX2ME`46J!F}0l^LhDUZD6jP|b? zE*!MsEo%d)tE&=#n@Cv)#9$I8%;mpapK;sdeNnJSIE`p}RH#XHnW8-ns!q7RU1xke z`5vBkh@Xkz(;su+OiO%34b@xK#64IC1BG!)fvKu28S^J6E+wO*l~a#+#S6>K?rv2* zbjHbI8C#G+o?x`L9<+lATg&jHA4Uz_ZoSmE-EKU%bO* zAj)-HUIiaM#ifQhC7Av)dvC4ZSG~VM!(0*6rrvv4VIH40*jSC38^}Q)S?BbIZ>=08 z*#}s#&FojPDo>U&Zm+gwtuIgp6%>AI(~2^?CNuYHeW61^x?3wYn$@JAzJK2t;+QZn z`qKPgoalH*!CQZCme@BQ3Jc*u;(Ut9fgK_aR`_rbGQD@YVNiZyM+FZCD%? z!jwh1#}JtP>EQ;aoh4qR+6=OrQy=Rh6)epP$BLE3d>-Jn$#My>*O)}RnA}(=iKw0? zC;ISST)uQlXwFUFl+#qOwpa{Vm?k3wwiADrge5cWmHLG*k=?Gbv;Fs7jS z`EXckUZ2jZgcnRX0V}~&&hO+7h6M9N$be`;>3JWglOF#v?E06H%)_67i(ZL>G=qJq zsk(yJw|+y8fiA>AqhHFE*!Xi^`!K?_Q1-3?J>*SJLWs4(1*Ki zYMQ1dIn4guUhRY1-E_ZhrFz`PzGpjio=v)}UXV7)c5$n65Qe@S4qB}$DW%@G&JkkV z4aWwO*MbjyuH?*DEA8G}%IljR406;>uMi#lCI)?c`TBZzx1cxOw7`;s11>e4$uJfC z+QLpE*g!*mUICc-9|=B7qb0~3_GMoCrv*Hv!MZpPx1cMM_Y@fr09ESRt07RAziRwe z;}r)-R=-4lY?_WdITH9)&{Y4gLj+Tea-g)H@1HGy>!IKbjwZ`&CU&J zwBzFzh@Q3-x5gE9&SD1bPOeJvw)VXXFzXA|+g_cfc3SG9Giy>Q=bE75gz!289u5Pb z#nP2Q!s?>&u3qbVPV*fBm~Yw7dXlDw!Fr{QI49nw-Z{jmEaC;q_nwr1cRzpMK$0vB zOu%`awhy!}7Pc6>N~0XzlQfbrO=%Ekr?bJ%zZWqa7^NWlTRxl-*zwLPuE`VJ0j&}b z_UcZF`IT7sCM7kqo@(lvvn#VB{8ISyqGs4scHDef(W^2~kp2fpG#ZwtXzUbSGvput zAfzC^X_LBp+SF0^xVO(QW_Pjk11lF=Q6jOvg?M=%lUU7GypI~=|GTiXJ78lfY%V=x+umo2ASq(% ztdhLA$f<^a-8DP^`3|w9GKS7Kch#GKRHdComi`%-_S2>3XxBo94tTbqY-@frM;hKc zFn-|FzA9UGUdj_~kP8wZ+X}`J%&p=S&FMxWNM*EE`>Nds5iD}}KAlsVpb6@eD#RY#O&6^o?of3io=C`R4aPzf=VYc~Q zY%No5bT6?JtE{rLUDRmqgNziZ%VlWWfBErL zlL+EQMyM`^Gi}I^IgV{vwLfIsq~2!do!3E>4Z5uwF!|c04BT7pHAV4{Hm67WnVSb! zl%?NS65idtjd@XvQLN%ZQUmm0Q5UlpSxOVG@$%EM9FZ(ax*60UuX-CtWj%J6lVm|p{goSY*U)VaBg7W|PScyB4q6*HBAo&dIKv(n}xzLs0vR za@+ay;xIittLJ^WO;KsSL7+-dlCEv2XGOJ@t5g04i2SX?OI3Dg^249Rm#a|&vEc=d za)Pp2eaE&MA2~gwuN5bUspNeIKqGDonD)xm<^8-l_dk-HGtbO6R@qrfqF`?s94`s+ z4CJX)GUZUK&Sa9d5P9QD4j(U0%S#i*s-%pRltlf}>r&q~du3O*P~lFNj*t`b!+BeY*v6=dgK zi1vi48f_nzFY||vwm8OE>0NhiO46wLKi?f6TCrkNkzH^+D<-aVwlU~OC)gJgSVn#< z;Y_9}#Zz)IZr|&N$5c7*p3&ci4pafLMH*w93Rv2n+|YgfBY7dK^uSx@8Rk!fxA$!$ z41;){9{|#8D(Y^1O*X#(FMP|sdscBu@vH3kmr>xg=sK1BQ@Pa5(}k@=sY2-74ux`j>!{7j18cyvApSbsZP!ipERH*MfB@lg9Y9sJC`3MLL5U^wU(+FxCw97A3WnC!$$!& zqe=9Sye3;`f{g66YlHlKq>>zQ(y%=RL}3;vg6NBBhFtg`z1@NZ6YBHnaj%J!&sLsw zCXg|GPMA$-7v$zfK?3;Ju$R*4^^xYm{n3cLfRr%+;Jc=Vf z-7R0#$obkO4kZSAH5OMj#dUnGx*O4qjoQx;)-Ss7mt4)3-U|;dt4hyNh-%21Nup{m z2n%Wk-P_v@wQO!d{G7Be%B}E^t*ig$e@nc*v+^xg3KSMgyKJi#oN8q)EM~jQwZL&2oIjxngldi=G1X`8WvLK8fn?z^1Q}tJa+og zPONuk+!U57@MmUqIRKd9|Fi=ca>l~;JRoIX$Gw(@vj-&xy}>RX$y+>bqQ z{?2xPenk=dTW$B7n7ZyPX8ZgjQ6s|vi;=vR)Q!5DqfPQrTRA4ncL#iFlM2=Hnpmwa z-4cS6YwEa++TL!sBj0wE+J<0?csXOp7h0BuJiS-Y`{$e33kFV8f?7*w%@jK4_klaY zas!PCW(7aKeD&=-7=xHAgs0=X0lL^U;szoG_@r-ynqYP3(a*=9VpGHobe|%<~7}0XnQ;ohI=ZHyl!!Agp9a>W4g!sg}3{ zlLKJ2f{!V5la*s*&nFT3r$m{-QrXALB*Q9F^`oi6E7Bjsv&SHoVYWW2Lh8wJOrN$= zr1gW$JcPPNFUiDY$aLo!Y9hx5S()!xLY|Z*qcTwZdL6@@w}J&hmE&~64bk&o#q{r? zW*Q?ixLkx+j4*rX1yqxEO(fcOc6ehW9XJTJpSVWgYK!dtQ95P zZ}TwT4wRAuh25gGrj@~i;jy}Pq@yQncMrI$% z)At5}$jq_M_loXcTzl46zheV-LWIo@>M=dG`BSz7n^o69kT9EIUI%US@F#o2Z^Ufa zy1kig=Ph1uclcWD6qyxqapm=KpnA;j$DSbS_`B(m6`Y!NBD%$PcJ#jAal z!FGHhQR>0V!W7(;r!vS)JW(ma?ZV0Aev{Ys_-fH;AG$l4&-~{*ulqRvvV%T%-{2Xh zg=(fMjvlz|({`C)&V#ol-KI8IWHiX{`Pr_)ugETpVUkvHXWQj$P{f!~s4l1b8fEqb zzSY~sCrS6+`=IST?epd29NH$r|Fs?vFT2n|GZE2cU*Uc4MD1rfy15;H9zbM<(^}tG zUoKmdLqzMLGnH4pxkwSIziaV7TT!5O~IQ7Y%Jea#}Q#lDcsoSB~ z0eQVtx_|4FjgC`7ob0TRiA!W)$KU5y|2$6VD$0}e=2=wa@n7*SVX%}OfICh0dEZGX zSs&Xt6zUUgi|Mcip)MwlLNh+KQ>-N&eu$aprj}QRIt$r*cBr6|v26&fu}Shj3pj0e zPgNYM5}@2FIL#05?FyebH!c#T*G6Png61KmJptFhgEfOexcZce-E=yz{eYDRPPsmSy0YXx$=8|VQTVq9%(Ix zRHc2n;yW5IKQDHi(JU=A-s{}o59xV3P_o@&zl^Hfjl6`VNOg&Bv1%){J6dau5Fw>6 zzw0DOX>O~ft^$AjG3NEtOv}0DA0IdlKTmQdnRwnGS77a7>v5GOQ0GxDc;nP*BQR0H zC~G}Vd8|uZ;I)OWYr4Y-hS@3+a`w%x;s1j*NpeUDt7_XOY430!D1zr7RZCqbzTtpk zTxi!|?sA*MTa&{@+My$}yVr#R8x0NqAS}6-96I>%7zXhhwUMO?@k-7l;mG1h*B3f8 ztTg}Aaf+s*RK@xk{n=|+usWe9QqBg$=b{G~@(yKNTReYl$*1uz)@MEQs0D;*8-hNM zeEnMUVi$|w+0Vyo=7sh_MzB*ScB;zXf4NMKdmFWk+GCqd=ZR+xf?~$6qk>w&)tq>$ z`|` z@d&o^)lJ$dHFud~+WG)m%#t3bsPDnr%fxDV;xls+^AiKdg}@nGlDg!2xyLTJBu~53 z1ghJ%I)#!^nlBPy!P-}}pfqAwHhDedKxj?6ei|H`yP(+?`28OboImIL!VqUerV%=I z<%Y{+7gdwqIm-6?n`Py!t|X&3tlaY&A#?qb8F(94V z!~IcpYT9bi-=Y)(;Z$#Qcv&7aIqP?b7M}RyLx&9hUYb=Iiti1%Ovz8zD5-{|?wcvd zYv-B{4K8!#j3b%A^~PF;`?H15MdpDG`alH40n#Jl^j4E^LHUE)qtvBZ&I2UA4*H9L z#fut;F(qTm1)(96C1`Vq*R1gUK|SK!3iL~F=I^g+E!#teW~WEybTPA$*h{B56}lh6 z3%O=xKUwmtX0H6b^f+A%nwg7KvG=vmocj0+wb3ius6e_4G?dd+d!L!LLQ2NFSKEJ? zUPhHKgmVC))}#|}b=n`7= zR$<^EWszfIH6BOURPwAgh#IZRQ^KI6A}3bu*$HBazn-i##?(-&uk_7pRpsSqQVeFD z6>l~9G+0HegX;_LG2+uRgaal%CNZlog1Y>|JJrqJFE8djZJKw{lo07Jz;W(No73&o zf4-X>nE!Ao4@7pp((Z47WehW8RcK0#7Xo%rm)X0_U!~kyf&*BU4ejy-a<;&>P#-?X zNFWunvwDXoX;1ERtThUYebESae>PSz=g}MFdZ3kEZN7JXgHD-=;py5J4Bru2b5hXl zuJLR8WTKoh*WfBYlV$=Wk9gMfY4u&NFUUMNkh;NpehDuvEiY?l*q{ZGE#6YSi$h3k zecys3(Tmn(KgTX|&W?ox!$PP-F!>;95qI-I4>}-55VAcZ8#^AlocL|iWX26o7RqCW zXoRN}Y73%hmWao9w<+i-D-Uelu+|KXr6;&8{}8DD%&Gcb{8>R@kMT@x=QXYNCn|*b z%Ny~hk2-5 zP#{3YbKJR3uy*n4zDeZP9$P~&*5Y>fIo7WNQs&P{BmdXuUH>Hv2M3@UuM zdOxT$uLU`0Ll1`gxzT?xU+)-Gqcb}yOy@SX(Eim;3&wqR4XsW2ec?OF%0?wc{G$z& zvGLA;d#HIqSsnAC_J67qQwYT}kGjwvye;Tx*cf{a!^EVoH8EI8I^#QP@N7NK`TApq zSQE}%F(;N%0rE{jiFfui_w#Clsw3j|xYCPg+t3S-^>wsp8aV}Hx!6SgWzr1^(LP1~ zZt-no%Ss0JR%OUo>BOGH-H4Geh(p?7Q8i1z6&(8QFW;nV1(y26OLV!UCZorX%4;bOeE zS4U0PG2JitmofVxpNV$$+)ntyu6(q5IPEX2 zFEmOUzP?AvghOP)`(pr0+sfnkR0H;BN`svDfsyFp981W)jbZisR8j_586@xgy??&z zBZSTSRR1$1{6sg=Y%@((*Fsyarr8|*^IhFa3z>B)^u?p`Mn#S%Fgb9J11*cVlskW z9GsGI+LTkR!Yx=NPA8*=Cf!U!SR#{}%|txJv5$TBk8PlwcBX=lPlD(H!Tj{C&5fwF zFI?rk07}E;?VR;A?NC3siPCE5De1(`cKnI*L0}MIZD}(&kYm@lf25NKB!*GZjflba z{(Y0?ScK0&s^L3c6X~)~m)fNLW2V}o`_R(%2&*a(>DceqDCUW#M?g9z2+IC!h`rc| zLEz(GV*(EM=O#G>?SjT)l%|`J`V!3R$p*FD!pFQ1pi3G*(tZ;`IIWY1xP`ORiTn)h zglLnx=?tey#gHNA0^>t){fh+|Rhx1X3%~pM&0TvtU*YT8g?3RgAj~{iSa~KdBWxq$f`VsU zw2+Py%ZU};m{c}sW>Sf7R8i?$nxbDb?!vYD*^pj*q-ZYPJO!;D4%Vj}E(+dv##Nk= zbKHWexERe3RHw}(ViT#(WbAZ(&5v69%5(N}jiu!<5wDlvyy4=W%9etK8g8NaqR37v zORn7(Kl%c*W*d;NGp2@Goj`?F`r6+SnLYyv*cQM>z=+^8|Eah32sf3&>{L^atsPjF zx_ldY6r#B2?T31rQQJg-Hiy%seD&wfKlvoY%bQ|yWg4ol-?;iJcA3wNYicE*D$Wja z3R6jezM6`{zAeUChchU*c2^v)E9^zXUqz*DbVNmmpNoTSbp>H`QNDGaKC~9Q2j(UN zEUpr@z$d7q_>ObP`@WmdPp;DYTW57m8Bn6r_D>DNv=G#KP=aTnG6iv)Eirl=-SufV zMgf`|cx8(ApAYTtg@AgO$Q=uDUh|XY1q5lEQ;uR5c=xel^KeyqDNwy|fuOQr3g7|f zQgl|1?#MI!xj<|+#pjl*l0&y2zXy8y0k&*jKeoR<-0!V86tl=ST7f9Yw1o#@IkmN1 zB7hjj$o#~|0qzSfDGs7ZR)f|?7n!Ygy!y#{nT`LQ3(;KwEcgF)gv;!5K+-3UtL^|w zm*`vOFxd8mHFsCsnWwBoa8I0aTxn*hP#;u-9@GS6NGX+6$@;8}tvK@*!wwwaoa_o1 z<3IE=WtBtYMI41)9x`0(Ni&K2WjRh}tbpHVn7889$7=247{6fcUKc5V9$k&w6wDv! zu}U-;cXw@-+#HN9+$sJ|)#Hweow_^Y+IbYxc3# zmeN`xeOE{f&A8+cSEkA5S@Ga^?zOj`iHY+CNPo%wef6!gVs-Z%i*<_YI7uN$E~_xC zN*ic`eXH|(fek4-)qrPnk8IH5g0eZGlJ_h7KTi|MryY+pW3>XNmyqt4`H8-+Teo18XUh#8d9kCb|tH(-m;@ zj|zYXk|3u=Bq+=tY=nKh)s!k|k+fWZ<8%_jM|j@Mf?L&nU!&p)UGtsQk$5qBBGuY95Y zRZ;k4lsy?7tJ}vPnVuxYF`G8|1Y3pM@-(ui>ZFN5D<-29 z#ng`{T%`1uwZ!+$B;;BVtgv(a-anq(e};0EW)w@}>dK6+7n}&K$Tp)A-Qja8Zeyu0 zBFN5xp>y>E9=i){P*;^>-?#RPe(=KQ9u-x3!cptH)^Y9L|5Pq$M93p?Qxde6!pK(laFqP)98 zU>~}T3bPw_bj}<4<>dEPU(e{kLNS#XlV{y*ayR52!o6w(FCOb-xHPx1Zp?&bwB!*G z`9b4dk9yPj-UbID`>L5$H;pTth^0q-Tw!_PPokgI0?Zxkhs_FAsq%uALHRI+dwiU+ zvUb9>b)hSJSrN59_$@n2~AHeFntLfbnqHmnG;_R ziN=&wBxBbJXrax#!m$-QaV9ZV)BV$lp595v z46fe4Fx~wPOWFBxVD-elxOhT8zp%ipzK>?a{vI8#y!w8ZpY7%@K+CRr~7&hx_r|NM@ydVA1Y64^C5U3n7mEk#8uGP{yJ zo6DK@B_dofeD@&anhHqh-Tl8*6Qw1{oO#EzVwK ztb`V(^1=AcpKT8HSUDUUtm z&i*>)6-eAh(+0u>mRAf#L4Z15Thq#L@EjQ38);-3Uuj$X+AZxYcPE#R&+rVr*AnD4 z{hNb+Deb2!4>Q^AEr@=xam!?}vkXX?Rly}maOB6pdjtFKD}O4+K9ivvz&zub7b!e6 zYS{B`ex>u+)U_~k{atrbTxS%*_iHXPUgah0`^@$h?Z^!m|JzdimC+wAe*69MS7Z1f zEwp5=@F5ClhsDP<=9N|*&O3=Fza~~U=u^K53anXv5(esTSqUYlaeAH)@TILBZoQ-Z zB&2a2rzY8IuzfmeZj`ow37;UD%kX&OcthJNA9dk- z1`_^fJhEu@*pXQF15eb=WA{G8J$PSVwYk}!aZu$sw_at;3;GyN2wx~*ofba{J{W2k z>G$H?YiQNZeUE0GzU>O-YLv#-?s1~LlcJExZsjk+*~@{j+e^rrVa=!kDasTdkoNRs z7v?rqU;KSsb?4|#A`ohdwfWd=jHfupl{4L?roj8E3pHJH7Cc{|=3eRCfbm$WXmDQ| zXgmM$$G@#r|1cgfS*KjJLAYw^KiF@H20RdDuxz8)kqM{c=f&DL&jW8uGp$KB3QQxJ zZWNeLiUC3K{rjcuFaO*jQn0l|VZ%(75uRt9VIxzd3-tYi1YBLjE^lf9qC7 zq3uT2gOHYpT)2OI-M~#|swFn7Y;CjnD#_kx-?a7{_P-fqZ50`RSVcj{CH#B5=zkP5 zWFO&^Br8|vUSPz|>G=1pFrYhab;Chhe}7{9g<4f>PPzmQc;ps1`B#qa*#9iLAOFx` zrJF;SJV?I~v#Ye#zt4P8t#>e+PoOH|(7{tM*ZsBFw`GFXc?XQgV&xd7U6ozyGK4>^ zf2RmUB*>j>{lqqhqVr>Ed_2-=>Z#40Ro7|9>5oa8+t0PXj6W<6ow{#dkyzTSYuWE! zsR82+7!q1_)IK`rdqeW#1_e9Yd7$OV)dK^TNuQXJjaP@a?t;|4xX8Lvqg4_6p~EHa zm>R2YPKmocsYsS3*soE2!1}!5`2d-i_QxZxtd)pyK;IEw!(Tqd zrQty5|1NNNAT$zvu#0#liMZ7c5hBCBnLFr|xNO&gan}&kF?NJ{V2oj2Q0(*5q3NAK z_4kWG(O+?QUHHd3tb1wahbDGd)o6p2-*dV&);NJ#S~!@jiHSDB!L~kkI{hUN&Fqai zZ*lA2evG+zfaZk``TzZ=z~ypTsYq@2{wp84*$vll46|g_EDBLpr^DWvf3w&N)P9|5 zVk8%29hYC(l8 zE9YhGE

*ig!M9Qwx*x_1l*-aW3mcYvD33dYz>w@Q>xgRbzR*6e8%q zd_H#w^$^L6qSx_pVx}^ z-CC1G2V(9)Lc$f*8Y(|dD%FUfQ4!>r9~=qCYY5ia9rTY??;Nze1zCVcH0h&fnbU{G zzl)78!g3J3hvmZJ7b>V6@Jo3v*uj;#%^qj`(mCSX!seN?#+nRQlrTwNr zEt+~*9J794nGeqYShox z^a@75Znc`fh+24)h^`V09rwl)k!#CZ{j$H6+2j& za&V||y?Nn_mW8n5^>yk}X4G5}b}tnpS;V_Lxo;?|cY@lMf8wg=N*%F@Np{IX?W;N! z7)9<|B8dBQl={T5h=wI5z-hi?yVW2FLDpUf*H`gjvSjQ+4Il1oSvCm{Vp$5^A5b>(}>gG-fSqyvDb4iTwyx+NmA* zUD?7{IL=~^BiK?wj;+>Baj*Wj#F6??ZFk5&keU>%-4}2@x-1b5)hb6O5g{L)JANmTjUrjz{4o74ek~8y=%XZ6 z&7DQH12Ic;YboNg)3-ty6@``?k*yuRFF!ge-td2496!79tvM+pM{WX->ot2(Q*o#W zw~DiGtUA59p#6Gw*A3z!%C$0BJV%C@vcOuADR%kASp#G4@LE63gFq2f3B94gJ)*^h z580Tvtg)a^<)=^!@V5ob$ypvZ%ltg3Cn&njYOl~i@@s#D1v%~*P zNPxS196(OD69(=4vqqjf8nRgD=~4!^LBl*;oBL5kOPz-fSYq94trX!zNW9!m$%ZWYVbJD5!Kc(Y0mRp&{$HG#RNscxg z8xp;F_~qNTk4;0mb%H++n(hA+ypAMvprZ|3I!eWnVcq^RQ%xG56a?^V@B)pu^s^a|>&(&Yw?joZ){3riy`mqI-BA ze4*q?Uo(^LVN_HX#rZKR(6X}aE2f<|UZ{BjJ&e*CGm&RfOVxiJ78;ECik)s`=yhZ^ z5qJVm|M0wg+t$P(q6na^E{2c+EIe0l*EJ|G2?$ADxZBpyx*agp|FKtpPiLVvR~M9v ze@NBx?pkW50TJUBo2$XyS4&mgg1(O!gRZ9}Dsl%^?aFQTqXF3=o?I>F^ArXP%R?`F z@1uhT#ksCeB7M`bAKKN;)r(h`(qvfXn@oNPCns_&N*z|)N{mf&n>P`&f8et3B8f4W z9#)Sym9_vr)0w7~BzedXUouT)J(x)v>VJe7x}atU$SsCYBQ&HVaE94`)S{acr%)4p zt|KpFodVYvf;IE)P!c`baVrAH&!L%PU$^LVegyX!3U@0H{sdZD2rKMMli58(>N~^1 zePcmdF@st)x+W9BV6Z8+wo|K<4s<4#yu?ZMeQRv3K`5H!S|ysGJk$A0Ti@kP#6sMT zcMWz3up&xYeia|bw!#VfDa!aUk79n=iBS-$_CHa`5XCBUBXuL=_FMW=Ap|JYixD&V zq=;nU8Vs?4HOy>muyk4Ku@Bal&;YlaH?ALOQ(oF&PAGez!TmFt0IsI%)aFv)fevR}%?qxt;l5&i!*!S#!Ibd@ zB@1z`>RL-)+n!l)`R$X^F)DW1l`vH(uBf8#KE1CB8GJ~-uz}8a%&v^)w*I)p%Ie>o zxjK}4P$l=pAgy0>TuAc`CILr-cSTD`EU0jH&mNqc%Nd^Q7BmWqI!90QsJnfdcr%dq zgWk>zIc~@Fw!t4So8R6l70SV=qkjHruPq3$nvg#UH&ZCbq3Jwo=Nl4&_sYs zi{pj%lNSDdhS@kJ_$^vmXnh`z5|ve&LU#ur7yPu#pYFW9t+qKOBRWFRD2(si%39 z!?=7MY#CxcKcrB4SLX@YmgOX%j`A?XiQLKB;IO+(2UW52g+s4cVr{cSSr?T<|CfLJ z?PIAC1a!*yCj6N<8RiB}?nyaF2&^9Yd@}vrX6^aQG`}VYu77VxK~^~4m#zKHEqrUq zvXC*pF*P{h2#>jqQoIfwTo2FCh||w9Rg!3!^B*`M^CP^uUd2Ua<{H`CJY=40jQMQm zNwzxkwB0!{k8tV`!?c)i(P|F(m~ks7Ax{^WU5t0~*)OLVG@jZDL(f8`4_}gi^pZ! zwKK$wtvSbKrNHvc7Wer~{1ay_&zuB9V|dw_CD!&tD27PR(V2I)0#)s6Gm=~dE7MhFEh_G967bj#jZzww{UuE*edsB_4H@@F^0|a;u`Drt=ouA^dpv z0@)uYew7ew_YdKKkOi=bDP!^%_=Cl|AUQ3{u)wmlgzk+5wNkSk)uE$iU)L0H0%l%7 zTW#an+~=;BI3D`1!!1_~M9?HCt>u5?K+3AbA0xD@>KQ$Mn7>cwq$~b4{O!Z68?8kQ zlEO!t@Y;==416D~yGSml7%ELHgS{w)GL5Owzf*_@W^z(Xo}W9#RX=&&cePS)}FWR5p;TYKBp-bjb@UEjx2Ek>qOQ|OJ;v@x?+vis%H;}h3I}$AO3Y&A^mMaA9GKf9;%F0y@HXXoqUo9I%@@affP0+>E^ylDrsfdW(Eo z$adf0<&SC{hjkwbO?BbvYYx*CLMRPZ5*Y(L1D=U{+S(NX%gvaR3YV?=gehMTpnAwC^jZSl$3V6qt`n5){?-ypLREj zJ<8@p>@WY6Wu{n?JW_?vt@Bjyjhzar{X82U{cE90g=(D7x?Osty;Rft^?i-vLx!FT zHZnQ{?IJkP<0wOJCpt6xv@$?&7uU`;Qf`CKmrr$rwwU18NW{qET=cN}-4J&O0><(l zW`-Vl<+Ke!F{3wX6jls;b4Y*b<+Q?EYAn9=>UEOFXOM?gur^&2Ift_V6PF*C98A|v z8PESA5}If8hh-GD(zf4r?+9^ytHyJD@=gb!jODCW+)>DooFrOC2y5});wyxvbHC6D z_uGK5mg+7=m|@GD%+&FNzdtp<@mXOQ6a%p*WOwh4;1%x9&N_ji;YuQB`5lS;yQISEu#_H@Uo zr}Xf3iFxhF*_s{9urml9m>wDVoI0ij^Gv;H%yD$5yz~9Agn6~R$+v6|OlwBx>tALi z+MCMtLRD)t68GagWrhCGF`*YFi?*7_FqOWBc$yPA`%G7_9GYtj3oSwA>-f}qzqIsX zT-BYL1a_*V@#=SS=iTuj4UHaO$gIxd1K4zig?MGek=*Ux-S}U7f$M-0;z{}Y_Jzmn z6%zbkvXsS~Uge37$T(^9FT!dX>7O2UO+bbQTZ=&9o--X+t2X9(^mW(#;~&=p%MC_I zRhwI@+@T0GEd1ySrX1iPD~pNgWW7R1sOVx3#}>gtMq!jeR?q?~zyFeVKh9d;%;6bG zRlUP*3lVreC8@Pnbr4OBA`P0jVcJ5RtVy;>_c58`AoICCL@O-(i>;s55`Ucb)gY!! zxXLsGTeTvJd=ul8P)m7j(;oEdyrYUkO#k+Y`Jaml^9x@?xMdIiK)WA(ol!E0{Bem} z^&Jq2la0yttqktT_HUcvCGm0(bow@SH`mQER9DSTrF)z{VLahmF+dHbFhj}}OOpGU zBXZ{s^n{qn1G`OIlT=$|Gv2gGl!Ybc38Ldf^vkN)#~E;g8GQkdNzAh{RA@-q-x>&M z94&$1k5gQ11_a6~8nskGBP=?N*WHXW@%3WznOz!2?rB0F?O0!jP)8$w>@_r`y7qNM zb4v3#YN~7nwTxP=z8_-_3E>5~iv{T33lub4tsj8f;4g}3#T9bbi9MKLVQ>=IoTV@R ziw+^H6Et^)6YR}Q_QE%BJ*EA)6tq|dLUtUS=a3UWW(autbryENJJl+8s&|H@L_lR{ z2PuXSdp%+(p#X2_ik8**f`%8JTUoYE$uX7&-JY4?dO#)lYn)((!bZY3sFD&+J=XyjwSjxOkEWe&nZ_8LiK1 zrw(VNW?8(ST{}*aCMI75aBc*~7x*pUpy8NjEY46)jmw$LUcc*Rc7!!?j50YjMf?fl zZeHf;aPG1HX)kg%^)BZ>R=hY+cn)U8--;IX=Qj6Ph^0q*apmr3>}i?tR}{`_pPD?w z(3`i6vK2G(;2}0HVfva|bBseK+Y?w+7ad!qW$-*rt0fcBx;0F`O$0RKj^lh9$IUP5 z9wzNAO2S6{_#WD)qP=j5f^Un}zLhhR@m+%lpq%e*!ogWIM=b&I+Qcz>=Eo($Lzas2 zXF=NB!&31z1-<*w+gl<0P(nNDTW3l! zfZqywdvdPBx{9{6$pdqK+dDBAMpz4a*YWimZKw~;H40H3i-2k{Yh_dTMRmr;uH59E ziQO2DG0J>s|42I`kU!lXx9sZiskCQjmlFwQzunei4X{2P-wn*VWl;0 z1lIc78RxD(gZg9Z!$3WDdfr`U&%R8i&BQ{|Y#%A%_37I<#WR%NR9F&K+l_H&aXGKs zf(a}a-DrS-Tj!nAerF0$3pWxjq+9iSuEUND+?ASoI`qav1XaI42*G}vh%ZA5sN|Mc z*0s5CDZ0};=%CQ6#w>vgV-tM(fu;ezN=XMTj%5d>|HhXz$=~vttCtEGi&rkrPyW;#}CfeRDb?jgs12rO_@?lXVnz z-=C$owTXzCIK8dUON(oKF*0H-wk+x1o|>T&`NWGp6D?m1uSM?}9Tv*o=HTriyDKkS zGRmjfA^itMHApK$`-chJZmY)-suW=Q8rDwSTYe-+hx+Pf}VExI=0(Hp|r zsMP$RHkDZy8BW@MzVfCW5hSGX-)=2&cXuCR zGITKJYPk_a7u3j*z7mAU00s-@>*9q+R)+s$A_ z%c=k+^uQXS2JH@2XpQMVP7?#1Rh-f+Al@o3rgAhWY>F>1Wg3|b);A|IBpQS&vxju0 zL(o!=C1{Qwr)Dam=``l6j?z%YOsC5!fd%UF8d>c+QB)il`#c!Al+b2Tx_{P6u|g{W z!Ll@2OT%K!+Iq=yps>`dl2gvrdY%tdtO#A7r1LOk&@_QYp3PBUi!L2%=ywoS`fO(> zFGwRPUqg$LwWrgR<~=ZTXc&3~oLhXt8#;>i_~kgQ)UXFE7eyT$u(++`{ojHy1_| z4qN)%)~VT^oH6^e@m81E!PmMHt)$bjcqljqS2U3_?sATgm+23Sl4n=o(g$Tg{!!Y9 zz|;NTp_H{%8o&e{_`#+3z#YoOtH>1dfSzV?gq*yO)U9Y^E6%jS1S zTRjJDMswagO^Ec5Frc%nYX@ucvl|;8y}~u;DQmZ+Dei-UoBJaAPi(cTFo!EA>I=Z# z{-^dAxw<+m6L(Q14|8&~4`AHL#i~I>OJ(O{cP^x!ZZbU09`No*&q#AhyN_`oDN#%C zO3b7^$c5(^ePoOZcE79qwt@gFi@UtDw)6FP_93&{pttYVgc?b?<`d9bI?YXaGD@Ee z_tj#>LkvAhG~IX&X|W(_@tdhamE4I-XcgUM{P0hU)Ks$SXs3n8V`BOeZUvzC@e$RP z7C2G$?s?|NAD2v`VRnuMEA1)~5p48op-}#Kx+nwgzO*-<0U3!^d5U+CPs>pv(hn{C-?|W`4(6bn`UxTb`rc?&4@p zTT5rNz_KhHhSWy?Z#txeN8?+49^vPl_h#HrC^RaSaimvpYnS1!e^v+Er|6y=SKU#C zSnG9s!bmETMN_6k>nCAADi+%i6jL(X&CT>3QXDrr+VAGLZiF z`zD{0V4xZx5L`8~-Tq&|;}lZ5$v%Rtp;P13YZm=^h1#|z?H$!4=Wvq0nw+^)*AT-u z_~c`B^i4b)kwDIi@Q$5)A!%DPyyX;GTWHv{K@d`;#RORI(;qgatAh%)eD zV;H6_&RzAkP<;NV1FJhI_>RUFKh6S=p8J5%5>xsHa8 z&>Uf>)NMa(mhNY2&Ze7Hf}7=O@v&~!vN>Wja89Ag_c6;L7@FkbP1Y$~ZPX6ld(hsL z73g*~^Q0JUE9t&bbjgn+h>A9rIJuDtDbI+Z5ViIg-N4 zoj)tQ#$}pUY{T~#MurTn+_l?J%Fna+O|KtETJm2!Z zb2M$oWm965^_KNshh+u7UCL_RUIn7N`U=I*m>Nxwuw%ld>}tzJr4#GM+E#ik(#D!5 zD#1RPH;F6`I;^o3wzc02TpbCHo{sw`-N3?WMTV}d=6;%Ma4fu60ibE|IiF}f+$=Q& zsoJvL5f}~l7^FQws)m`iyswAmr1kcgQw?;u)NqpX=;!SPvkgD%3l}m>(DRc4`c@Jl z52C$<@ECs&Rs^{nt%eTC>h}1sU&dG@T}w1GV07bVX$c-LdR?OTAsfV|^F*S2p1W^# z$LnrbRk-}?mw8TQF^%+e1G*>U?PA~7oT@IUI{P~e)}lzjUi0;a8XDr){H(eW-BpjQ?Y?Wy=0Q`$SPLHqAvGmDc|Z zfwg73$>_3D*?aaC$|43I_Kc-9laW1l822MLpmYubn zOatY&{S;WA`g(|a~~d$8_p2UIIxC%xF&9P?Zz9Mpw>TU3z0yp?d)5dTBTWWJz+4fD@WWTc^vn|vz$)L2(96Bh( zrHOm`{@*A0o6Yd?U>A5vDtL+%~oy9#AW6nei`492Q=ndihI~jIk)!$VwB1 zS~!Mt>=OB`viPDbOpB3j_JI-Cu{?Db(>F>tKEHusu}j)h*DZ0?7iKr0t$JPhB61+8 zKc%*>WzS#eNw5MJDjTLw(r0pnG|4R~vg)or;XvBWtK3b+ zk=z_EDiXCp=!~5LAfP%YXwsbf0Utz5V@TpVjI-SY1{4-B#AZ1yUpp+XWyN=`+FDKwd5dPm$&_E)&I0=5@bBgauLOaI)` zp-9zPG)2&_fA1pPSVT+JNnEe4)gmXwUO$~NaPVqkGR(qRC;P8;&fa4{jTRzx;p;v& z#zgX4T`(PGl0F`tck4Dq7vw{*nu)gQ71CM$CtyVYaxHptH9f9Gd*J!@=q$JSO&2tw z@9aqyuHHC&HN#ZyGC9p(X*8$~b&*frN@nz$1AuLR=@XTO<(76uBz}f3XG$J)M?0zE z`xMAwaQpV?4e!0d(nSB4%$L_9?1U;vM23Fg(6gmB1R}JxJwr5k=pF{9KZ2L^n>%aq zkQ1I74NB1btP)yE%a2R?ih9cgIINvi^<6Xt1FwLNoU<)^hO&4~w|_nk%Q(&ZMX9Dz z*?$MiMX-826WsbG6@O}gvX}9l?!p_Z8oPT9+Lbnz<&S{Y*s_n~bvQZVx~llUdYjth zfDLXa@`wkhTI6~kt4H4tgK#m`kvTfLTX)>{gmCg3-Cq1M02c{YvJw__cn6O7SwqDj z)=4Y_m|Z3%-W=N>gg!>gWpvDV_3?nHDy%}q_y`zdjx*6nhB_`5owQ)1P9NkpDdznA z*XYjKnsHnC;0+OIsZ%9dfI&v^|6Rkd~*7H_~x;7D-gs$n0g}a$|QniJKmy-Em=oYDW z>BErQZC|oVd*E>XeWx62hXw%EV#?7x%Y$bx zZ!;O(1bff48W(@!o#m4H-Er3T{IvAG=xij~%)aT+tVb3(U7Fv;O8xoIF$@f~wpM zzmQH(+R4`J)_uUEzF%N5^#>Y{Ag=QYwOp>xY+D4#Ve90#vEOL>tAQya6~k2s-Q3Oo z_1R&(V^6?nX8oR3O%%S@d`^Ok;$`MFlz}$*3_Lb9Uk&5ZP^A$fi)1XBkH^8|w3U@W zBhk`(y*Rjt5*ifQWvl}-*eb#KiAgj+$Hq^r;_A8$3Q{z(*^$}N>SOZz4h!^QU@(gy zQC+*K+ywls8oiof1j6k~dXobCon;#L!|KlD9pL`CT+~{OUYuy6MSX-qs1R}hu1IqG zCj830La?dA=$nS;D_JYX-KJmkxoXqOlGxnQjIs%DUFDu(l8{`vQrkP@m%Z|L7KAXL zb-$3d2Cai1f> zuv{vGItt>g{C#IPc0cy%t2HzF7v}=^l|r%$rDDvW{TKF?`H$JGK1Hx6hr2>N_ZXG4 zEw{q)Mflc#nYk97ze?iBOEeE^r68bkA|xV7SaNo>iY`^$8=4vM4&2#|`#n`HK~arb z?@F?00_q6PVI5bKy7OGC)Cfyy6j)V|YfbS6+hAS^VsV?Z=$LV52Vlt8SMWxxkX)U<1>N}^)3F&5jXQAcTs_e8!Nlg)`GGHz z{0cvDP_WV$)LQr^%`=^04Iy{EDqwECiFTwH35h9ENNQTU&VTT7FaHk@bIyy$;TALc=dNmU(6n2Nwb&5Uy}(= zD^#pGetD-yF44U6ypR$8v&+&10B6nAuwJq|0Ha-35 z_I$r(-3^~sm!?P-Q;u9TO7fNjd0T+fHny7PD2MxtxKRiS@}+mMwlZD$EuTD#+o=@Y z8OvPi@Rjk5KYaH{i-P4f&!q1+(6gVWpuhBvF&t$BXIUE)C-Xlpy>@>cJf(P};{I^O z`4xiT`|1PcgAx0Z#^*sHkX{;Cak2m~{1n!y%YP*wn4${kcNW)i+~171MPOKJiS9nr zNO=mjF?4A}UGQOHzv?Zk?ZbrOa*4eSyew#6pB2+@QqaZ4TMi;92^fpqrq+qFdv}X- zVE1XYnQe&6uN9U?Hp6epsXF8u<3B%3*ezoVO7=7U@eam>wa~~^yRkcexuVuMJ$XdQySPn*#00t-OViIhL`iWxO z6Lh`3oyDDz%u`b!vh~RLhO6tDRJ&NyHl14QSvDkJRA>pRTD$An!)#6WC@sswu!hJ^ z$&;d_rLy9xb)R6U{cx@@?B=GePRzy#a>RmH@ad12|7O%B}?+--26jrOj5`bd=RW%eE+cUfk^-h;1+dyE14yB@(&%? z2=z+pd2S`E7NO$aP7qCti2rqK#iqEqG}cYN@Kr?iU}o8P=ze{UR?WZsDIsymEslqJ z-zXWkfVsG$nYC%9Aj2GI97s)`MR8xTN)Xe>tMnnNQDG=_T#}d($?5ydk&#_f{NkOE z``c64E-OOOsQp%&wvb7nwDREfSh>Yh`6{bqFV2z$oh$Q{t zQ0quiF3$h`@Vmb!tZw<9<|>e-JIO|2E?mLi`PIV5nI|KJUa_N0L?N(-d}GqZe&a17 zq4Y|zB2z-SCTbNH-Klo?pxf3)7^-Iv7WagBC!m;~uNP_#m2W9LFAQI|YpSmX-;J@X zx?2`2bVv+M1Jg1Ua;RAiqsVpNGB()EtRf{{c!R>Q{&#$b3PJO8O8q0po%io_B|dDP zD0L@W1Di<8g^ns|M4o_Zt|+N9L76_QC*v8|m%X}gtyKU2`*)4%p|N$!Bh6*rT+4TA zjOqQCi7*^bEmqtoq|Z6)BuhK#f5G!VE6vyCvo~AJQ(c*Xjw9=T{IS%FX;=S#>rQ?y zq>Un25*E&8GjW|8{+8-GF0r>eMDExm>@gJ)k>7~pj)Uv< z!U1vet=~-X7IyF)`8|+sF!N)4M=pWq2fDi7;e8a!#@IJ?HrIXYm2?2kE1--r0qX7C ztoGLAJ{!C5?&r63({vFwXyD=i72xUbyE;q-XpW8>3aZO$LprP;_4>IhBGW^|yhdGi z+WMXDtW^67dP6-P$ye)~_Y!0kW~-D=gKRSt)UpjXV8J<{K#9c`FXTwmy0{~yMJ%8pVjO}_-VpUr5FI@o{R(!ulY2Ekb08oH*++f zP6%P$c;|gta{omeoWsu^79tGAOo+40i#Dd|k4p)CI~6>}1GD|i%!(b|?zyOE|1pp8 z!p+)YX7f$h7KPO-1&P11#CZ4KHk>#HMgeNXfcL;0YT?^8HGi{;s+-4O7kfnD(yGkl zR{USc;VRqqP^ENd9_xVy7wKYgpuULB$*ZcW*a0G(3RJA^pE{hy>1_x zbr7ou0+_&!(t5jhnBG|q54y`*nwC$+UF5HN6A?M~K>TcUIP@zM7Bp?)c<(_lIRE;m zozxWW!}473I6$9uT}^J32k7p!`yK+=_LmT1fPOr=d`>3evN zFjAFo$vSzFbaMcUS!`^nWI3iR!Y$)|O#CP8UdS%k&#vhGi70Po$>w3Ey9G{B<;SI^ z+58`uKD5AET`7!|ViE6q>9a&ZSIgN?CmQ*H%=f42v4e^!8b>JPnT*8JKPTu>KP5-5 zLN)bkp+bG++jK`QVog(7iL9E^js8gO2Sd{2B*LvA@9K^cHABRb5OSI_&ZfLfC~8VA z(+K*M9$2cUY$7K`aoX(-Y2+`>G5Mjp*~iYpos4b8QfY+87S35tVQD)0z+<*|Ijkfv zwZdnI!7?6tEM^IY5d5>cHY|=7-5d>OZAQnPvKS$JddPBYhV@3~X04 zHIj4F?;?KHanx4iI!P-{%gSQ_wamP>oM^Pi^f)m3lD6>a8TmhXu4IX&G9&nSA1ed$ zyj%!%5HdjJG}vm;W3;1!iCoVjx7joiBN^fuysLbpcBzl zasgyFwP7MMxhbZ$+N{6*qR19nof-PbvcE;RYh5$7)uNT^0fP|e+LqU&iwbRo*$Pq5=rJ2xvM`eZDv?Ev$}_r zbM7boN{nL9oaXL*;P#{&XVw{R>t&hRy^kd1n^?lu(T~57@2SC~#{V!jEpU9~nJ$Ph zbg{Y_?yDoN2Y26ga5Tcy{jLlkpkXS}bzgICE$7+4C;Gdm^1!<6w-&2-x``8ZAN9|- zNM{wgl?E^De1KK_ZpO9k&uL=nf>cdyPrgFY=6MDp64^gCnSBJ=Qo6beY81BXzFVX2 z);3)s!Jh<%g!DO$bgWx5O@LsWjgxdYhh*3c*Rq~UHN7c}3vsJ$dX<*Go3%@SCkz3b z{ie;@dxwti`Ola1QZd z_2-smtr9 zvf0SOuPmU`#r2F|lJ32Q-!tWB%~CtR<8Rm?2-aR}-(}=PsoveeUtX5yw2a$%z7N=2 zAx~6f$-f7PkAd-0DnE!zgKpKBRf_GGmcbVOTY zcNTf!6S;#AmIqk>P5oW^73u2SnKNgv0<7Bh4OXG1L6(-wUkf(6Mq^~l=bU(bq5 z1nAKH-0YjbPrUYN<`74UmpV6GeM;3_Va%qG!fFTNkUqgf z&w{P&=3Vo+R7_U{1dr0yy;3Ds=U&t%E0yZfmlZ9Fsh+7g4Ey%2lRR*my&Oa2wH5}r zh8sMpCe8tH0wCQMKXX%kjC!{ieR#ic()#gVkLLVq!J7K&hO5wD3nf`@i}$c`uc2}z z$@?d@);#i&v0MTM`kx_S_HT8bR99bd$E}*jg}`H3Jw#W}5~C|vkdex1<}c^9qC(ME zbytr47Ik(ZH>zAcUo3Nj;hNzejw0Q)e^%u51J*XJI$83mtW-5W11dTib&**7e9^=M z++$Xj`vrkMlInS|6xv|^-?S_uNEqdkB2>v1?P|!Q$x+1zI&g%2lqfJz&}+2qtCmKq zUJ?Bk^1Ppug{2+X&uO~~*?T92>R`C~ex}TYeJ;2VZ&%wxKptl)gK+L^rsS{qCo$zJ z9q0?MJRu%sU8l>@S&1y!X?8O=@gh6YzEj^t1`zs*{vo5R%U9c?)=E11B7bWOCC@VY z{ohUX@zha@rvV=KBq~QR_Tq5Oi1#SdaCPZi^?TD|IM54bC*@bdX`ximF(k&+1gyb_ zkGRE(Y>CNTVs#yR{F<=4YjBdEejS^;KXSMc{Ct43+(?}7v@Tcl?yJ`o_m8aZV8C-H ztEhK>2gye6dZH>3fmTo!BxFLp_<4p+u`(;ckd=qVXh_KxZSCIsbPGXPa9!RnLsxa?&naL!wE^u$+zM6y9c|u# zS{;}wscmafCOF?4vcs;xLEyhnknvifqh|Dzzq0xfefzfV9%sUbsEa-$N?R?vr)@7y zPz=y={kq%R63SmXnsvXSL2B3+kya?>2CuVpiV3%)o9->YJgE8N6k-ATt0%~Jigt+1 zuA9zDZ|42Pxl)w*ys`ZVjc5kRD_{S4*Kj%Nz#IUNU|8L7||#i%>6r2rZE; z9epH&J06%CMTF+90Xlo&NMW^|+P~5YB9;+WHv3z#KSLsGdl59t^8rr~yp=4ouyay# zEwbJ-OVF=ncQCwAQVLmACaZ6=)!XM8BQcMEmh98Ev2y6N?P5OVM!wsi=f)0F>cHM< zv%@=9KQ6rq)W;i~lVU9Eq8!-OT!5E2b*?J z<9kKeDlYrC-4*m{;j;bwt}Vt3g{`E3E9X&^BJIdz!)`U&qEo zNZU2F%9&FIw2IjW*!s}jjt?uC<%#0p!P-B1gT}*$`Iy}k57nMJ`&eCL+276RFk^Yz zL2Sk?NYR$HOY}uAu}5-2u*s1l$be^vLYbq%#x)80rvK3>ogsM~%&7jDGP&jhaFm9m zlJ=tj-?4PeqCehgAfO+OmjS4Epytz22O3G(ggPGt50j)A<}Y8;@pw-9_`_}agG+`=!o$==Q+J3{JPStAhq|W zQeMW|XYt?uO=Ra^4HPNiOAMdG`a&TbT6$VXqRGqdT?TMl_OzVzV`B-2vTdg>{$?bO2Cq)genAmn#O6o?b#vIsuxHLv|2p9^+sr!Rmht&RjB)MNjhwU8`GAD zvWhcXUVU3~#hW^vkni;#HO2D)RC^z zxu&uSf+~NRvj@po&dfWn_}JX`<5KsIz>Yd5YcN)BH%WNmV z?$eB!F>$G$EE|HnZ57{@>!%<~J#q?W!gJ8OAdRFvI9y8B=|$0Z*_cwN8CaA0cNYRhvB>Kj$i&u4ZhpBO_-=eq3tuB)%cWJm$;@{w9XJ zUKLpSZ$lsJ=Nt+{?nXRp4xPnT<`0N1Pen{RBH!taC8tU{7W_|uW#!yYYqTk4AFO`y z!C|01l+xBGJ+DZn_ae(!(kQsfC~w`Otap*4&3wl3hR}Z_ydn=h*mQ3z36gHy?aT;z zcQJX51bO?EddG_9lD*P}SBGHz;1_R(|L6o=_Y z{RW+&-2ZH4M8^FSvYz!)xP{*SW`yVmFy6%>hvboVzvOV3IkZ%)VMz4L8pWDz8~BxzEg0QxICMLEUmqb$q7T=&MvO`T67ASwOf;7 z$V_0{43D2YWxd3?()uRJ?G((@L=})j&XR3JeJmd6>}r5Asn)Q&lX?86S6`?D-eAxA z_R$479Bk#g0)pP68nQeps3UD}uT)a7Z&4umtm_wP!CdPcb1i_wRR&})O|U$j;?~Rd zYe}>tpQ1%rP_%@>8`e+KC#3CRVZo-axeDzk;+py9q~^mYN$tJGs?6N;bQ5X9uUxQ} zFgJYwzCZHR(W++q!=pt-#ny4t$N3TC8o7q;mF1FP!by~Dgm}+!kap_w|D)(U{F2`L zzu$dbXEaPtmbvv;u3VT~6!q6oLlP4AKIKGG1l;q!8hYGEP)I;MP8QSNT;zkmnu_dg6Shyo(FP&;F^2C?}Q4-(ZG)Zhruux#E2qhcbshb zYlaa+LF}^ksA>Rzl6z8jg$YSdQwZ`+wa;@y2YHoNr|lc2L+p>|ah|Epn-ez%*#(IM zd~39gQ*|i7=-mC(Z_dWRw!F`&4b`}|{88)Q8r=Hk{Z0la>j?S`$-|ef$K`%BY8sfF zvsqsD((swI!}b+bxu>6O;AXL@&fLigcx^}@P$5+sotn+%shT<1LLh#7X>vkYb4-JR zV9QRwr_ED5N$;Nh^39@F!-$aHtM1ztra4Vd`d`QHgn$_V%O3c$h_AgG@}~p&&X%Ii z+@)gy`){M+M6$EhsRt=99Iq^}Q@0sE>lK$kj^3b^Rwi{vhEes#g7c`D>;}Hk&3JL~ zf-+Dj=NnLoI=!)^bg%pEB7Y@O0x`Kthhbg3`wz^I1$W7uGFcg_(@0ER(IK6Yc84u^ zjd-4+bt|Qm*S!8ZE#x4Wb1qct1@Oc3`c>4|gI-FKoQu42iWxM zRV{+H&2K`mzXodh{X1*YnVNhcN-}7f)AWBcUyWwm^P^07T4-rGu-Sg_wn%tj89%3; z6LTU*lM~iPmll-}YkK!&pqgP02{jp;KC?>#Xv^LY zN)6TB(^;KY876*f1JIGU;w0;GQC+9S_Egto0z;wpAy!%{Z@zT$wZOlN=i6A@PFY>1 zC#V+u!4tmokQP`dL0gC0BPF*fwGmXKm0f>8EIfS?X~`Qg&~W$pTGtFAL@E|vL8(Fm zDaax|@Ob(9-7|}H%%+p7d0wCSdgdc{83QBkn>+9Coz-bE9@{cPko1OM__z}WRoKV>^KJ+eE}%~BTaTtY`CAMtU(sum zT;`3mt~6};;}xhGI`Pu6v(@VX_A(!AFpX36hvRVQk2U|_0*dAmO8INvUy88vuitR@ z{yFH{tpJ3Q;pmN=+oQHYjxCBe9DbjZRrybCh9raA{Ywo4f|qF<%`h1w?aWD7$F@9Z zrdtNr`sT|>c-!Wy@2=W^AvcN7Nnj##6$^-W<6kB)Uf2VH#uFXw-8qbVTDkS-Hn)^y z5htT{`8Nd%c>vvdE4AhjvTXbF(xUl)(MH<-&SM!suKSSjH+j$gJc7-i3N75))#``x|9M9QW%EH{vq|}3v#B8HUA~&w(q^>xxsI4TIJ36cE^}m zXn6J=rs0)`py3{Y%B-bmuj@YKG1+l+2Jk6Y10n1sE={Ph!G?~kecxtW#YVYj@0cXa zK&rzuEx=$DxMi)vv!sz`XFY*cYD{;@4INdwcQiY8@zOg88w9E4V4BT>qkL_sV#TS| z{$sF5zk`wWwre5p@-?m%tQ6#Xd3{%6L(=B3OsHu(Q z9tW@Pj@==SE6EA8V-Y8NsDVT=+qMhp#n(K4>*Z;=zQE>Ql=b-y_Z`uFLrEp~kzlP|%U@S0 zCz|4)6FK;V7Z4_5IVDK3e$BVniVzr9mSm~q#@Ah{v~CqatW&RKvGp8w)(+i+bvI0X4T29 zyq?uzfOCEQ%U&CrOB4lZA9FPBB$BFZjHv9ikL{BToZP9F%M|J3c4s_;kyJgR@eNZ{ z3b{b@!e}otixP@?%l>&uq02LDBN_y|k!t>XFPC}H>zyXw8rz@qDwfT81b1Mu&-3v| z38EJQNovpCVt{zQ^S=IpH)3>kD=!Q5cYiI}>PfBaa^L`^M zIS@Jm2#r#14JhiwB4An2IM4^rD*750{dYo-cj~j|rPuhk9l<^;6gt9gyeEHbr2Ez} znu{w3H%V`@8FTs0&3~zS3#w(VVK#DDgc_%HgZYLEs<7CYyOMEyWOEWNKm#X3lz?nj zfvc5VKpU9a@o8&is;6&9+9?otG+R@k1;A}2uh7W5?{K}DUw&Rv2BOP3kg86`NaAv) z^p|DdkeM1Qg{YbXZya^)L|0-SS>1;QfsR-|jI|Fe^eQ`*W8Hdc8P6lc>$Kkpw8O#; z?Cv_jsjpub+>3+n&(py5=ktZhrCFx&U{mw$ROuu=kca#8TZAu$^o=1q`KlmPqWhzR z2R{;Q^n_G31_ew&uK#`;GQx?!0Tbpe4}E{KxtBE7tG2GPQH7ErZJ@ng z6~cA!k8FXdoSbD-LbUN3-&mAJXMlzZf8$--86lgN>Cf}dE=2AU4|M%jXM&{OQofmk z7}B)4bnMEjq-z->$A1^-l{zphd1X<@_dCUvOe)wOCpBp#-g{aeHf65i$HRV&K(NPx zH@?elXYij2s;gLfE3H1`oMmG`+m_iUJgyKCx!$)2j0#~YS6NDNib68B4Ty1Rxe(uU-j%wgOW(5G|=BVZ)~)Qrw^VjPb^~1$w(ngTW*; zxgA)fgh8i_v>R&pO(BV9HDR;;ilvw5HX;NPJ{WrQ7WR2wZ-1^;3}{C^iA81WL#wL* z&4AUCelxIsHLanr%P1LS)GK=T!U}Q4H645FV8pcoA2Bvcl^A>m;tDN-8%}_68~jN{w>sqD$dJW zkCG1xFYZbk-?ua#3*4*$n9b>o?}cw2RYhX83{B9mjr#M~iQH@oe*P-t^xD!GAyxwG zQNBJy3;ub@IXA@X5Pwnrh1vvIdAa0>+6nFFj)D)YOT`WpI~h%~)*wwaln}~#0%+0s zvHJ>e1$FXbUD|I@hAvjZ0GQF;yed*($Bi`(*OJ3LexpU^t7RIPWMg7$sqc#uCSdmW zj_K_x9(*;!3^XO;^$P7GvF15de~B@~NiE^i)FYTcLjGzhQkYc?r%0Fhwx1nkX&a#_ zHA3rSi0iax$y}&C%dWcX>0)wFIyO5h!c>Yg1Wm<+lg0*@qxQH-Vj1K315+X>f+Gl( zrK$a~eETIh(nY(ic>-L1pjQ2jb#ngnpj01(I+@CuvnMP}(~}@~7x$MV&^F5+w|u6O zsnhFkmx(68$3>JTY^6y2;JO++yS~}74L_`6e3W0}n#Z4f&r$}AF#+j5DgmP_$K=%yC`r#Tw``d$i zPxc&S(1C{I2S-!)_M#|F_)et73-`ZQs+-i8B6s@&Bg=SKx&YU|(NC%>4flN`{dc4O z%#;=HwYKdVgFYKMFjd&Hd;&I9Z4Jcma^||+T(T9cznd7f#-eV>O0(0!di5)|Y4t!J zvE=8aC!fYYERsq?xH&-~v7Lof5rc1{_zNF>4=w5D3(4U`q{@{nLGl@j#yN~4b1rNn zeHIBiCF4rBmnO<+B^?8;7DEmiAqXw42~ImS4GUj%M-E;II1M|a#5!64)Pl`51kHf* z>IT0ft^7!zb*SNj^Ks`R{Rpu#@UcqKn6frp&(`{2;dKfIm!rn_Q<%_m;{g2|}BurN= z*P43oUcU#z)OL8c88ntHy0Xb?wOToot?kKo>6Cn)En1-0fC-vXG=(~U3&x?FeuK*E z6;*0^M73Y-7ni^Y2KS|gGS|E85}#&uynM$&qY`W~WEe$tO4jqK8(|Z>geR-doVOb) zDEO#bRfS_cT=-(K{;$u7NrtYR1B<33CBLqJ>Y+AKMBmR7yIDm{6*2L1b-rHf53d?h z^@2yJ-YeI!j{a+z-DP7+QFrMPURY{!HZbaWi5tz~i&VUeM4?iS-^`0Qwa9IzJo~oK zyoK0%d$_}zOXjsd&Za}utPgw~D-7SuwOjPTGbH91vz(KCt3!Fse&KbE(Wb4UfrAE( zzrRT+K^zM6FkXUtnktB)P}H57XMS3MlP5r!iVP=qghj~Fx3_E@&3*S(bZq^qmS>Mo z`U7_D_!R1OxRs$s-KuQ{?Ypt|Y@H<~DukNF00i7yKIjPGL(5ke=WB8Cub2GxcI!er z^OTaU*Gnp~W0lc&{B>e=(*;vU-(?$?HHCu*BUWOEA0Z5uRZZRI2R>Mos)kx711(zw z;7s309y`6E^>aCu=8!o8HSvqL#ygQuu<#g4`s=~=|faxzr5tc7P?P2#bt41 zs@BA)xp5)53}nhp`%oPO-^v=3=-nR{T58USO}DyriyYi)fU`L+C>$Kx2lJwVNI~id z9((IfH$*yzeb<&)IVZ3&eLZpk$|aj0$$BNeM36uqx-ZX_GZ2DA7E$GHU_(q^$ZJBd z{|I8n@eTTqG)3IEAWE_8i~7_vncSn~kH*n2L;Z*re4|JrGJE|Ep(bbS_Z}a74zyY|_Te zOy3Iv0BlpL?y4E80)R>h7iSizgWGV?wyBJlt}85ZxUb@&|KnAa+a&sFV49Ei`^k4e z`?jH?9~;9?|M%;M)j^F5wKuy+I8l8fxc%P#{WErzN#SLd4qLILh~Z8ilPO?R-4xkP zz?YoJqwvMvj|Qu1)t4C0=GoNreV_k+>F)0H)F@oR#!lfchWcb4 z`_wjrXNz!gmKcvf7~5@eAe+MRJ6c{%6C~6)32-I%`S&(WMRV(gS^#Xyp>J=3#^2`l>dSA8cK+|MM3+_$Qq|1s%=Q(+IJh-TT%xz$2cO*#A*E~}=;lA~ zo|lB>28`03J~Tg-Q}*5muaHHkFmSq>=mt1>6NMvVx*O4G27HjfX#*=&8sA{OLBN@epg<1H0Ek3)u zbf3E#LIgPTQ`dhO-J0#VlWOCAZpj8jWy=LikCF0%?iai*^pWZl%m)MgO z#q+?{X7qd$X{*;vk+%S4$vtkjVs=f*_&E7X0X+Uj$Y3v*yBc{L*xQk@u=>cwJ0hZA z`a%>YV*Vz(uurkWucYCdQ`6_e<_mMJn;&s!Xeh7Ycjd_|!wG*5gB(eeDss+>&_ll!8NG&TY^3}GD^IQ2Qo97pXl*~2ttUahZB z08O48KI$r7?)9)(&}&3E_8WkYW@`PTU-VSBfUSxg=IT1+cYDP^Gw3!OD|wM;*_;L( zCf@hfX2Qp{-SF{Ry|y1}TOH2yn&prhg5&)381Ge_l2-2N$mUlZR5fhM&eV-2er>za z5%2h2L8&U@z%+R{9CuOj(RwhlX!)TGW6{xW_jCdvFwk&YM^aC1H z%K#*awlVT4Ddr0psf)hE-y|?C@B*`nQ0TorK?jp^$JAqou(koVm&3g=0B>^Ok)*2# z?tugHP-w`AL>y+g2#Sayd-wMw@=+VFR(SSPB*U@UgUBE9lI8t4Rkd^m9EFS_ zh)Lig$uTUiorna9f`6M`Kd^>VTqAhkVC;JrbjY;(qU|82Uvpc9HL!>tyw_20*Znla zee_LCYy3(b(s~B*UDxwzt%uxU06%l>MFvg!X13qterl#5K!s+@Nmx)vwHouxe@9&* zX)ms?E0%l<${OtPA^1>LO589%)-2yGr%*-_&1a+ZM^!zc^P9Ez`xp+UG7X4}>mhBJ zPXxzFtqsJOY^xGLOD}ArANWU5!%EOpA^nP+u(0+raOyfRikiA&pNIKTaYIFV zC4-F|nSxkYnu`TP{`0A5)Oj^Cw^M_m5)CLYC~b%Ztx{R_o2c))OI~KeVk~t6kowzq zRIa5fNv}&mA1y@vQckcp=W+0`QW#LaZxB;zA_u_iO4)M%Xf$6 zIYt&I>>xEA^P(lVTd;sJIVTxw!{FOB40C`<_?OI+_fZ&)nna%keT*+YoVz?VHobo2 zbUibb_?8e`XL&Xbx(@cFiQBeNsg`1+-~x( zUp7wUI^^(xMne5+`D zYK*4!LI7p<(fB&*QKrc_TR&C}re|L~P?D$FHo@bJzX!@xvuUeN|7VwGn7mkUv-{%^ zgbSW*ntO+q*ngBdDD*d%RdW2bvkXchB<}U6Hw>WBa9+3mNQ1xGl~KR5mtJp94h0o3It{dH#4+~=j? zwt`S{7zpJC0W4}=Z9gh5=a;sHX&bs!u#O$V^cTPMr$osQoYkCsD;%ahEvOmEqATkc zy_!gv{o(J{GpgTUU`dN{`t;rVis9~hEQ-Cdnov__ zR5?{nj1t`kni}YPlVkPSB*c_5P_3##Etxd%l?;1wxPwT%8F_%AtJ|iYFeQ9a3-m~> zK~0-}rgURV@Bt=bmLqd3s&u0C_}66LM5Xjuesjm1Y<nBa?|brid7abg0pzC)3BS@V|Gqhh4B?6L3B<}W(0&Z& zP+7f|Z1FJsd$jO<{C9nI5#*bnm&V&*B5$8lqDDtG8oKvD(L~X8@Fu%%d@r<*Q2-m? z{Cc5|PkK|Ta@Kq{+)o1Mq9;l!O1y8&KiEVY4|L)`vWf1>0EzkaC|TP7QFuAdcuQz5Z?@OO!IrYvg8 z8}%Q*#l<}_Gaawf$jy7LWeYiilVI8ZbF5wBk$YqWIcay91aZo61=CM${Xm{><8`s8 zvGioI^b#B;G%O*)_eF3dJ_z7qEVx@%bp{ECQtDu`a~#ix)4b{XDjAL1M4_JDgWxa+ zTRPTX(;Oaa2G;WUW9g6sUp6H)^%WnOj*dt@(3{hRli}-w~GZQJRxqq_0 zkFbGQ_Z+`P7`(DForWz@_Zc4Dde8nce2oDwhFO`7N?-)=cGXkSms9! zCqUl4xBGjVTwc_&q4S+;<6F8NWChHz=R(KBo=vefWiiM4P}cm8?F zdl(y?hweKK89L}L77i~}+w}JrA<2xSeX(VqRW#yxlZ$#BH(l0$IeB^3G9zd~ymI`7 zD_-KG4 zZ@UCf63pO<*9F2RI_)I>V#ni@1iPa8e91pah2QrKafq7~bgiy%y1B1eWGAur#83iN zM2w)lw1<`;JIO>TPHs4`jZa0AUH+#QJpSS^r8P{m@lcaIiSy9Uc*12$l+oZ097jYC z`j6h8<$~c~wRC2T7SyeNzg%))sXbBcpw9V|Ie2fFu0FQOsK$_&gK1{7_WpYN&$A0< z0`;BgBoQ)=zhj5)Z*2 z&BFLz-eo#{7%P!3G%&=6DWg+xEmvSVvRF`DUdbemP;7fRQ{mrDg>;$e`d6A&os4Zt zm403d3-&jJ>YE^Z)&iv!^MIo8InqsH=VB_c=fOWL}o+FZcX-bF;Fn6hAcf{qtI){O#Ck z^Q%(aG9s}SGrHhSl!HnC#q8mQSF>}!VUFWJ5$F6TNrv3Sd)1<)7e6n-qiBnn15Lpd zYbpX64KsazsiQS6pu>KVg-g@!G;r8FHzfm+T#4nXH2rE{z$8++ru)-&=Vql}Bo9e2 zeh~U?qaP=b2f8X4GS@qlCymP1Hx=q`$7ZEdqvN3xY~FXsR#=~*lt+dWyG*~}Mvo6} z3hVWT3(*)aAXyhDVAWRLN7oDU%_6yQSK9^Yj~$+qVM_YqVe*aC{4-FS#g`H4_l=O1 z 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

Y2#d_pOEdAHz8x0cU)30N4^@W{p|L> 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

",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/jerrykuku/luci-theme-argon/issues + * + * luci-theme-material: + * Copyright 2015 Lutty Yang + * https://github.com/LuttyYang/luci-theme-material/ + * + * Agron Theme + * https://demos.creative-tim.com/argon-dashboard/index.html + * + * Login background + * https://unsplash.com/ + * Font generate by Icomoon + * + * Licensed to the public under the Apache License 2.0 + */ + +/* + * Include base and custom css + */ +@import url("pure-min.less"); +@import url("fonts.less"); + + +:root { + --primary: #5e72e4; + --dark-primary: #483d8b; + --main-color: #09c; + --header-bg: #09c; + --header-color: #fff; + --bar-bg: #5e72e4; + --menu-bg-color: #fff; + --menu-color: #5f6368; + --menu-color-hover: #202124; + --main-menu-color: #202124; + --submenu-bg-hover: #d4d4d4; + --submenu-bg-hover-active: #09c; + --blue: #5e72e4; + --indigo: #5603ad; + --purple: #8965e0; + --pink: #f3a4b5; + --red: #f5365c; + --orange: #fb6340; + --yellow: #ffd600; + --green: #2dce89; + --teal: #11cdef; + --cyan: #2bffc6; + --white: #fff; + --gray: #8898aa; + --gray-dark: #32325d; + --light: #ced4da; + --lighter: #e9ecef; + --secondary: #f7fafc; + --success: #2dce89; + --info: #11cdef; + --warning: #fb6340; + --danger: #f5365c; + --light: #adb5bd; + --dark: #212529; + --default: #172b4d; + --white: #fff; + --neutral: #fff; + --darker: black; + --background-color: #f4f5f7; + --login-form-bg-color: rgba(244, 245, 247, 0.8); + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --blur-radius: 10px; + --blur-opacity: 0.5; + --blur-radius-dark: 10px; + --blur-opacity-dark: 0.5; + --font-family-sans-serif: "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + --font-family-normal: Open Sans, PingFangSC-Regular, Microsoft Yahei, WenQuanYi Micro Hei, "Helvetica Neue", Helvetica, Hiragino Sans GB, sans-serif; +} + +html, +body { + margin: 0px; + padding: 0px; + height: 100%; + font-size: 16px; + font-family: "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB"; + font-family: var(--font-family-sans-serif); +} + +html { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + font-size: 0.875rem; + background-color: #f4f5f7; + + background-color: var(--background-color); + color: #32325d; + color: var(--gray-dark); + -webkit-tap-highlight-color: transparent; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +::selection { + background-color: #5e72e4; + background-color: var(--primary); + color: #ffffff; + color: var(--white); +} + +a:link, +a:visited, +a:active { + color: #5e72e4; + color: var(--primary); + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +li { + list-style-type: none; +} + + + +.table { + position: relative; + display: table; +} + +.tr { + display: table-row; +} + +.thead { + display: table-header-group; +} + +.tbody { + display: table-row-group; +} + +.tfoot { + display: table-footer-group; +} + +.td, +.th { + line-height: normal; + display: table-cell; + padding: .5em; + text-align: center; + vertical-align: middle; +} + +.th { + font-weight: bold; + white-space: nowrap; +} + +.tr.placeholder { + height: 4em; +} + +.tr.placeholder>.td { + line-height: 3; + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 0.4rem 0 !important; + text-align: center !important; + background: inherit; +} + +.td[width="33%"] { + padding: 1.1em 1.5rem; +} + +.table[width="33%"], +.th[width="33%"], +.td[width="33%"] { + width: 33%; +} + +.table[width="100%"], +.th[width="100%"], +.td[width="100%"] { + width: 100%; +} + +.col-1 { + flex: 1 1 30px !important; +} + +.col-2 { + flex: 2 2 60px !important; +} + +.col-3 { + flex: 3 3 90px !important; +} + +.col-4 { + flex: 4 4 120px !important; +} + +.col-5 { + flex: 5 5 150px !important; +} + +.col-6 { + flex: 6 6 180px !important; +} + +.col-7 { + flex: 7 7 210px !important; +} + +.col-8 { + flex: 8 8 240px !important; +} + +.col-9 { + flex: 9 9 270px !important; +} + +.col-10 { + flex: 10 10 300px !important; +} + +* { + box-sizing: border-box; + margin: 0; + padding: 0; + +} + +.h1, +.h2, +.h3, +.h4, +.h5, +.h6, +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: inherit; + font-weight: normal; + line-height: 1.1 !important; + color: inherit; +} + + + +select { + padding: .36rem .8rem; + color: #555; + border: thin solid #ccc; + background-color: #fff; + background-image: none; +} + +.btn, +button, +select, +input, +.cbi-dropdown { + line-height: 1.5rem; + padding: .5rem .75rem; + margin: 0.25rem 0.1rem; + color: #8898aa; + border: 1px solid #dee2e6; + + border-radius: .25rem; + outline: 0; + background-image: none; + box-shadow: none; + transition: box-shadow .15s ease; +} + +select, +.cbi-dropdown { + width: inherit; + cursor: default; +} + +select:not([multiple="multiple"]):focus, +input:not(.cbi-button):focus, +.cbi-dropdown:focus { + border-color: #5e72e4; + border-color: var(--primary); + box-shadow: 0 3px 9px rgba(50, 50, 9, 0), 3px 4px 8px rgba(94, 114, 228, .1); +} + +.cbi-dropdown, +select[multiple="multiple"] { + height: auto; +} + +pre { + overflow: auto; +} + +code { + font-size: 1rem; + font-size-adjust: .35; + padding: 1px 3px; + color: #101010; + border-radius: 2px; + background: #ddd; +} + +abbr { + cursor: help; + text-decoration: underline; + color: #5e72e4; + color: var(--primary); +} + +hr { + margin: 1rem 0; + opacity: .1; + border-color: #eee; +} + + + + +/*********************** +* +* Login Page +* +***************************/ + +.login-page { + height: 100%; + + .video { + position: absolute; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + background-color: #000; + background-color: var(--darker); + overflow: hidden; + + video { + width: 100%; + height: auto; + } + } + + .volume-control { + position: fixed; + right: 1rem; + top: 1rem; + width: 1.5rem; + height: 1.5rem; + z-index: 5000; + cursor: pointer; + background-size: contain; + background-image: url(../img/volume_high.svg); + + &.mute { + background-image: url(../img/volume_off.svg); + } + } + + .main-bg { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + background-image: url(../img/blank.png); + background-repeat: no-repeat; + background-position: center; + background-size: cover; + transition: all 0.5s; + } + + .login-container { + height: 100%; + margin-left: 4.5rem; + position: absolute; + top: 0px; + display: flex; + flex-direction: column; + -webkit-box-pack: center; + justify-content: center; + align-items: flex-start; + min-height: 100%; + z-index: 2; + width: 420px; + box-shadow: rgba(0, 0, 0, 0.75) 0px 0px 35px -5px; + margin-left: 5%; + background: transparent; + + .login-form { + display: flex; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: absolute; + top: 0px; + width: 100%; + min-height: 100%; + max-width: 420px; + background-color: #fff; + background-color: var(--white); + -webkit-backdrop-filter: blur(var(--blur-radius)); + backdrop-filter: blur(var(--blur-radius)); + background-color: rgba(244, 245, 247, var(--blur-opacity)); + + .brand { + display: flex; + -webkit-box-align: center; + align-items: center; + margin: 50px auto 100px 50px; + color: #525461; + color: var(--default); + + .icon { + width: 50px; + height: auto; + margin-right: 25px; + } + + .brand-text { + font-size: 1.25rem; + font-weight: 700; + font-family: "TypoGraphica"; + + } + + &:hover { + text-decoration: none; + } + } + + .form-login { + width: 100%; + padding: 20px 50px; + box-sizing: border-box; + + .errorbox { + text-align: center; + color: #fb6340; + color: var(--warning); + padding-bottom: 2rem; + } + + .input-group { + margin-bottom: 1.25rem; + position: relative; + + &::before { + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #525461; + color: var(--default); + font-size: 1.5rem; + position: absolute; + z-index: 100; + left: 10px; + top: 10px; + } + + .border { + position: absolute; + width: 100%; + height: 1px; + bottom: 0; + border-bottom: 1px #5e72e4 solid; + border-bottom: 1px var(--primary) solid; + transform: scaleX(0); + transition: transform 0.3s; + } + + input { + font-size: 1rem; + line-height: 1.5em; + display: block; + width: 100%; + padding: .5rem .75rem 0.5rem 3rem; + margin: 0.825rem 0; + box-sizing: border-box; + transition: all .3s cubic-bezier(.68, -.55, .265, 1.55); + color: #525461; + color: var(--default); + border: 0; + border-radius: 0; + border-bottom: 1px solid #fff; + border-bottom: 1px solid var(--white); + background-color: transparent; + background-clip: padding-box; + box-shadow: 0 3px 2px rgba(233, 236, 239, .05); + outline: none; + + &:focus+.border { + transform: scaleX(1); + } + } + + .cbi-input-password { + margin-bottom: 2rem; + position: relative; + } + } + + .user-icon::before { + content: "\e971"; + } + + .pass-icon::before { + content: "\e910"; + + } + } + + .cbi-button-apply { + width: 100% !important; + box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 50px 0px; + font-weight: 600; + font-size: 15px; + color: #fff; + color: var(--white); + text-align: center; + width: 100%; + cursor: pointer; + min-height: 50px; + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + border-radius: 6px; + outline: none; + border-width: initial; + border-style: none; + border-color: initial; + border-image: initial; + padding: 10px 0px; + margin: 30px 0px 100px; + transition: all 0.3s !important; + letter-spacing: 0.8rem; + + &:hover, + :focus { + opacity: 0.9; + } + } + } + + footer { + box-sizing: border-box; + width: 100%; + text-align: center; + line-height: 1.6rem; + display: flex; + justify-content: space-evenly; + margin-top: auto; + padding: 0px 0px 30px; + z-index: 10; + color: #525461; + color: var(--default); + position: absolute; + bottom: 0; + + .ftc { + position: absolute; + bottom: 30px; + width: 100%; + } + + .luci-link { + display: block; + } + } + } +} + + +header, +.main { + width: 100%; +} + + +footer { + font-size: .8rem; + overflow: hidden; + padding: 1rem; + text-align: right; + white-space: nowrap; + color: #aaa; +} + +footer>a { + text-decoration: none; + color: #aaa; +} + +small { + font-size: 90%; + line-height: 1.42857143; + white-space: normal; +} + +.main { + position: relative; + top: 0; + bottom: 0; + overflow-y: auto; + height: 100%; +} + +.main-left { + position: fixed; + top: 0; + float: left; + overflow-x: auto; + width: 15%; + width: calc(0% + 15rem); + height: 100%; + background-color: #fff; + background-color: var(--menu-bg-color); + box-shadow: rgba(0, 0, 0, 0.75) 0px 0px 15px -5px; + overflow-x: auto; + position: fixed; + z-index: 100; + + + .sidenav-header { + padding: 1.5rem .5rem; + text-align: center; + + .brand { + font-size: 1.8rem; + color: #5e72e4; + color: var(--primary); + font-family: "TypoGraphica"; + text-decoration: none; + text-align: center; + cursor: default; + vertical-align: text-bottom; + } + } + + &::-webkit-scrollbar { + width: 5px; + height: 1px; + } + + &::-webkit-scrollbar-thumb { + background-color: #f6f9fc + } + + &::-webkit-scrollbar-track { + background-color: #fff; + } +} + +.main-right { + float: right; + width: 85%; + width: calc(100% - 15rem); + height: 100%; + transition: all 0.2s; +} + +.main-right>#maincontent { + position: relative; + z-index: 50; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.nowrap:not(.td) { + white-space: nowrap; +} + +[disabled="disabled"] { + pointer-events: none; +} + +header { + color: #fff; + color: var(--header-color); + padding: 0; + position: relative; + + &.bg-primary { + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + } + + &::after { + content: ""; + position: absolute; + height: 2rem; + width: 100%; + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + } + + .fill { + padding: 0.8rem 0; + border-bottom: 0px solid rgba(255, 255, 255, .08) !important; + display: flex; + + .container { + height: 2rem; + padding: 0 1.25rem; + display: flex; + align-items: center; + width: 100%; + + .flex1 { + flex: 1; + + .showSide { + display: none; + color: #fff; + font-size: 1.4rem; + + &:hover { + text-decoration: none; + } + } + + .brand { + font-size: 1.5rem; + color: #fff; + font-family: "TypoGraphica"; + text-decoration: none; + padding-left: 1rem; + cursor: default; + vertical-align: text-bottom; + display: none; + } + } + + + .pull-right { + float: right; + margin-top: 0rem; + display: flex; + } + } + + .status { + span{ + display: inline-block; + font-size: 0.8rem; + font-weight: bold; + padding: 0.3rem 0.8rem; + white-space: nowrap; + text-decoration: none; + text-transform: uppercase; + text-shadow: none; + border-radius: 4px; + cursor: pointer; + transition: all 0.3s; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + margin: 0 0.25rem; + &:last-child{ + margin-right: 0; + } + } + + span[data-indicator="poll-status"] { + color: #32325d; + background-color: #fff; + } + + span[data-style="active"] { + + background-color: var(--green); + + } + + span[data-style="inactive"] { + color: #ffffff !important; + background-color: #32325d; + + } + } + } +} + + + +#xhr_poll_status { + display: flex; + margin-left: 0.5rem; + + * { + color: #fff; + } +} + +div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { + border: 0 !important; +} + +.danger { + background-color: #ff7d60 !important; +} + +.warning { + background-color: #f0e68c !important; +} + +.success { + background-color: #5cb85c !important; +} + +.notice { + background-color: #11cdef !important; + color: #fff; +} + +.error { + color: #f00; +} + +.alert, +.alert-message { + font-weight: bold; + margin-bottom: 1.25rem; + padding: 1rem 1.25rem; + border: 0; + border-radius: 0.375rem !important; + background-color: #fff; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + text-shadow: 1px 1px rgba(0, 0, 0, .1); + + &.error { + background-color: #ffd600; + } + + h4 { + padding: 0.25rem 0rem; + border-radius: 4px; + background-color: #ffd600; + } + + .btn { + height: auto; + } +} + +.alert-message>h4 { + font-size: 110%; + font-weight: bold; +} + +.alert-message>* { + margin: .5rem 0; +} + +.alert-message .btn { + padding: .3rem .6rem; +} + +.container .alert, +.container .alert-message { + margin-top: 0rem; +} + + +/* + * Main Menu + */ + +.main { + .main-left { + transition: all 0.2s; + + .nav { + margin-top: 0.5rem; + + >li>a:first-child { + display: block; + margin: 0.1rem .5rem 0.1rem .5rem; + padding: .675rem 0 .675rem 2.5rem; + border-radius: .375rem; + text-decoration: none; + cursor: default; + font-size: 1rem; + transition: all 0.2s; + position: relative; + + &.active { + color: #fff; + background: #5e72e4; + background: var(--primary); + + &::before { + color: #fff !important; + } + + &::after { + transform: rotate(90deg); + color: #fff !important; + } + } + + &:hover { + cursor: pointer; + color: #fff; + background: #5e72e4; + background: var(--primary); + + &::before { + color: #fff !important; + } + } + + &::before { + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + position: absolute; + left: 0.8rem; + padding-top: 3px; + transition: all 0.3s; + content: "\e915"; + color: #5e72e4; + color: var(--primary); + } + } + + li { + padding: 0.5rem 1rem; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + padding: 0; + + a { + display: block; + color: #5f6368; + color: var(--menu-color); + } + + &.slide { + padding: 0; + + ul { + display: none; + overflow: hidden; + } + + &:hover { + background: none; + } + + .slide-menu { + margin: 0 0.5rem 0 2.5rem; + padding: 0rem 0.5rem; + + &.active { + display: block; + + } + + + li { + position: relative; + border-radius: 0.375rem; + margin: 0; + padding: 0.5rem 0rem; + background: none; + list-style: none; + + a { + text-decoration: none; + } + + &::after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + width: 0; + height: 2px; + background-color: #5e72e4; + background-color: var(--primary); + transition: all 0.2s; + } + + &:hover { + background: none; + + &::after { + width: 100%; + } + } + + } + + .active { + background: none; + + color: var(--menu-color); + + a { + color: var(--menu-color); + } + + &::after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 2px; + background-color: #5e72e4; + background-color: var(--primary); + transition: all 0.2s; + } + + &:hover { + + background: none; + + &::after { + width: 100%; + } + } + } + } + + } + + + + .menu { + display: block; + margin: 0.1rem .5rem 0.1rem .5rem; + padding: .675rem 0 .675rem 2.5rem; + border-radius: .375rem; + text-decoration: none; + cursor: default; + font-size: 1rem; + transition: all 0.2s; + position: relative; + + &.active { + color: #fff; + background: #5e72e4; + background: var(--primary); + + &::before { + color: #fff !important; + } + + &::after { + transform: rotate(90deg); + color: #fff !important; + } + } + + &:hover { + cursor: pointer; + color: #fff; + background: #5e72e4; + background: var(--primary); + + &::before { + color: #fff !important; + } + } + + &::before { + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + position: absolute; + left: 0.8rem; + padding-top: 3px; + transition: all 0.3s; + content: "\e915"; + color: #5e72e4; + color: var(--primary); + } + + &::after { + position: absolute; + right: 0.5rem; + top: 0.8rem; + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: '\e90f'; + transition: all .15s ease; + color: #ced4da; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + transition: all 0.3s; + } + } + + + .menu[data-title=Status]:before { + content: "\e906"; + color: #5e72e4; + color: var(--primary); + } + + .menu[data-title=System]:before { + content: "\e90a"; + color: #fb6340; + } + + .menu[data-title=Services]:before { + content: "\e909"; + color: #11cdef; + } + + .menu[data-title=NAS]:before { + content: "\e90c"; + color: #f3a4b5; + } + + .menu[data-title=VPN]:before { + content: "\e90b"; + color: #8965e0; + } + + .menu[data-title=Network]:before { + content: "\e908"; + color: #8965e0; + } + + .menu[data-title=Bandwidth_Monitor]:before { + content: "\e90d"; + color: #2dce89; + } + + .menu[data-title=Docker]:before { + content: "\e911"; + color: #6699ff; + } + + .menu[data-title=Statistics]:before { + content: "\e913"; + color: #8965e0; + } + + .menu[data-title=Control]:before { + content: "\e912"; + color: #5e72e4; + color: var(--primary); + } + + .menu[data-title=Asterisk]:before { + content: "\e914"; + color: #fb6340; + } + + a[data-title=Logout]:before { + content: "\e907"; + color: #adb5bd; + } + } + } + } +} + +.lg { + margin: 0; + padding: 0 !important; +} + +.logout { + display: block; + margin: 0.8rem .5rem 0.1rem 0.5rem; + padding: .675rem 0 .675rem 2.5rem; + border-radius: .375rem; + text-decoration: none; + font-size: 1rem; + transition: all 0.2s; + position: relative; +} + +.logout:before { + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + position: absolute; + left: 0.8rem; + padding-top: 3px; + transition: all 0.3s; + content: "\e907"; + color: #32325d !important; +} + + +body[class*="node-"]>.main>.main-left>.nav>.slide>.menu::before { + transition: transform .1s ease-in-out; +} + +body[class*="node-"]>.main>.main-left>.nav>.slide>.menu.active::before { + transition: transform .2s ease-in-out; +} + +.main>.main-left[style*="overflow: hidden"]>.nav>.slide>.menu::before { + display: none; +} + + + + +#maincontent>.container { + margin: 0 1.25rem 1rem 1.25rem; +} + +ul { + line-height: normal; +} + +li { + list-style-type: none; +} + +h1 { + font-size: 2rem; + padding-bottom: 10px; + border-bottom: thin solid #eee; +} + +h2 { + margin: 0 0 1rem 0; + font-size: 1.25rem; + letter-spacing: 0.1rem; + padding: 1rem 1.25rem; + color: #32325d; + border-radius: .375rem; + background: #fff; + box-shadow: 0 4px 8px rgba(0, 0, 0, .03); + font-weight: bold; + +} + +h3 { + font-size: 1.1rem; + line-height: 1; + display: block; + width: 100%; + margin: 0; + margin-bottom: 0; + padding: 0.8755rem 1.25rem; + color: #32325d; + color: var(--gray-dark); + border-radius: .375rem; + background: #fff; + font-weight: bold; +} + +h4 { + margin: 0; + padding: 0.75rem 1.25rem; + font-size: 0.7rem; + font-weight: 600; + color: #525f7f; + background-color: #e9ecef; + background-color: var(--lighter); + font-weight: bold; + + em { + padding: 0 0.5rem; + } + +} + +h5 { + font-size: 1rem; + margin: 2rem 0 0 0; + padding-bottom: 10px; +} + +.cbi-section, +.cbi-section-error, +#iptables, +.Firewall form, +#cbi-network>.cbi-section-node, +#cbi-wireless>.cbi-section-node, +#cbi-wireless>#wifi_assoclist_table, +[data-tab-title], +[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear), +[data-page="admin-system-opkg"] #maincontent>.container { + font-family: inherit; + font-weight: normal; + font-style: normal; + line-height: normal; + min-width: inherit; + margin: 1.25rem 0; + padding: 0rem; + border: 0; + + border-radius: 0.375rem; + background-color: #fff; + box-shadow: 0 0 1rem 0 rgba(136, 152, 170, .15) +} + +.cbi-modal .cbi-section, +.cbi-section .cbi-section { + padding: 0; + box-shadow: none; +} + +.cbi-modal .cbi-tabmenu { + margin-left: 0; +} + +.cbi-map-descr { + font-size: small; + line-height: 1.5; + padding: 0 1.25rem; +} + +.cbi-section-descr:not(:empty) { + + font-size: small; + line-height: 1.5; + padding: 1rem 1.25rem 0 1.25rem; +} + +.cbi-map-descr+fieldset { + margin-top: 1rem; +} + +.cbi-map-descr>abbr { + cursor: help; + text-decoration: underline; +} + +.cbi-section>legend { + display: none !important; +} + +fieldset>fieldset, +.cbi-section>.cbi-section { + margin: 0; + padding: 0; + border: 0; + box-shadow: none; +} + +.cbi-section>h3:first-child, +.panel-title { + font-size: 1.1rem; + line-height: 1; + display: block; + width: 100%; + margin: 0; + margin-bottom: 0; + padding: 0.8755rem 1.25rem; + color: #32325d; + color: var(--gray-dark); + +} + +.cbi-section>h3:first-child, +.cbi-section>h4:first-child, +.cbi-section>p:first-child, +[data-tab-title]>h3:first-child, +[data-tab-title]>h4:first-child, +[data-tab-title]>p:first-child { + padding: 1rem 1.25rem; +} + +.cbi-section p { + padding: 1rem; +} + +.cbi-tblsection { + overflow-x: scroll; +} + +table { + border-spacing: 0; + border-collapse: collapse; +} + +table, +.table { + overflow-y: hidden; + width: 100%; + font-size: 90%; +} + +.table .table-titles th { + background-color: #e9ecef; + background-color: var(--lighter); +} + +table>tbody>tr>td, +table>tbody>tr>th, +table>tfoot>tr>td, +table>tfoot>tr>th, +table>thead>tr>td, +table>thead>tr>th, +.table>.tbody>.tr>.td, +.table>.tbody>.tr>.th, +.table>.tfoot>.tr>.td, +.table>.tfoot>.tr>.th, +.table>.thead>.tr>.td, +.table>.thead>.tr>.th, +.table>.tr>.td.cbi-value-field, +.table>.tr>.th.cbi-section-table-cell { + padding: .5rem; +} + +.container>.cbi-section:first-of-type>.table[width="100%"]>.tr>.td { + padding: .6rem; +} + +.cbi-section-table-cell { + line-height: 1.1; + align-self: flex-end; + flex: 1 1 auto; +} + +tr>td, +tr>th, +.tr>.td, +.tr>.th, +.cbi-section-table-row::before, +#cbi-wireless>#wifi_assoclist_table>.tr:nth-child(2) { + border-top: thin solid #ddd; + padding: 1.1em 1.25rem; +} + +#cbi-wireless .td, +#cbi-network .tr:first-child>.td, +.table[width="100%"]>.tr:first-child>.td, +[data-page="admin-network-diagnostics"] .tr>.td, +.tr.table-titles>.th, +.tr.cbi-section-table-titles>.th { + border-top: 0 !important; + background-color: #f6f9fc; + padding: 1.1em 1.25rem; + line-height: 1.3rem; +} + +.table[width="100%"]>.tr:first-child>.td { + margin: auto 0; +} + +.cbi-section-table-row { + margin-bottom: 1rem; + text-align: center !important; + background: #f4f4f4; +} + +.cbi-section-table-row:last-child { + margin-bottom: 0; +} + +.cbi-section-table-row>.cbi-value-field .cbi-dropdown, +.cbi-section-table-row>.cbi-value-field .cbi-input-select, +.cbi-section-table-row>.cbi-value-field .cbi-input-text, +.cbi-section-table-row>.cbi-value-field .cbi-input-password { + width: 100%; +} + +.cbi-section-table-row>.cbi-value-field .cbi-input-text, +.cbi-section-table-row>.cbi-value-field .cbi-input-password { + min-width: 80px; +} + +.cbi-section-table-row>.cbi-value-field [data-dynlist]>input, +.cbi-section-table-row>.cbi-value-field input.cbi-input-password { + width: calc(100% - 1.5rem); +} + +.cbi-section-table-row .td { + text-align: center !important; +} + +.control-group { + display: inline-flex; + width: 100%; + flex-wrap: wrap; + gap: 2px; +} + +div>table>tbody>tr:nth-of-type(2n), +div>.table>.tr:nth-of-type(2n) { + background-color: #f9f9f9; +} + +/* fix multiple table */ +table table, +.table .table, +.cbi-value-field table, +.cbi-value-field .table, +td>table>tbody>tr>td, +.td>.table>.tbody>.tr>.td, +.cbi-value-field>table>tbody>tr>td, +.cbi-value-field>.table>.tbody>.tr>.td { + border: 0; +} + +/* button style */ +.btn, +.cbi-button, +.item::after { + font-size: .8rem; + display: inline-block; + width: auto !important; + padding: 0.45rem .8rem; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + transition: all .2s ease-in-out; + text-align: center; + vertical-align: middle; + white-space: nowrap; + text-decoration: none; + text-transform: uppercase; + color: rgba(0, 0, 0, .87); + border: 0; + border-radius: .2rem; + background-color: #f0f0f0; + background-image: none; + -webkit-appearance: none; + -ms-touch-action: manipulation; + touch-action: manipulation; +} + +.cbi-button-up, +.cbi-button-down { + font-size: 1.2rem; + display: inline-block; + min-width: 0; + padding: .2rem 1rem; + font-size: 0; + color: transparent !important; + background: url(../icon/arrow.svg) no-repeat center; + background-size: 12px 20px; +} + +.cbi-button-up { + transform: scaleY(-1); +} + +.cbi-button:not(select) { + -webkit-appearance: none !important; +} + + +.btn:hover, +.btn:focus, +.btn:active, +.cbi-button:hover, +.cbi-button:focus, +.cbi-button:active, +.item:hover::after, +.item:focus::after, +.item:active::after, +.cbi-page-actions .cbi-button-apply+.cbi-button-save:hover, +.cbi-page-actions .cbi-button-apply+.cbi-button-save:focus, +.cbi-page-actions .cbi-button-apply+.cbi-button-save:active { + text-decoration: none; + outline: 0; +} + +.btn:hover, +.btn:focus, +.cbi-button:hover, +.cbi-button:focus, +.item:hover::after, +.item:focus::after { + box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2); +} + +.btn:active, +.cbi-button:active, +.item:active::after { + box-shadow: 0 10px 20px rgba(0, 0, 0, .19), 0 6px 6px rgba(0, 0, 0, .23); +} + +.cbi-button-up:hover, +.cbi-button-up:focus { + box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 -2px 2px rgba(0, 0, 0, .2); +} + +.cbi-button-up:active { + box-shadow: 0 -10px 20px rgba(0, 0, 0, .19), 0 -6px 6px rgba(0, 0, 0, .23); +} + +.btn:disabled, +.cbi-button:disabled { + cursor: not-allowed; + pointer-events: none; + opacity: .5; + box-shadow: none; +} + +/* gray */ +.alert-message [class="btn"], +.modal div[class="btn"], +.cbi-button-find, +.cbi-button-link, +.cbi-button-up, +.cbi-button-down, +.cbi-button-neutral, +.cbi-button[name="zero"], +.cbi-button[name="restart"], +.cbi-button[onclick="hide_empty(this)"] { + font-weight: bold; + color: #fff; + border: thin solid #8898aa; + background-color: #8898aa; +} + +/* dark blue */ +.btn.primary, +.cbi-page-actions .cbi-button-save, +.cbi-page-actions .cbi-button-apply+.cbi-button-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-positive, +.cbi-button-link, +.cbi-button[value="Enable"], +.cbi-button[value="Scan"], +.cbi-button[value^="Back"], +.cbi-button-neutral[onclick="handleConfig(event)"] { + font-weight: normal; + color: #fff !important; + border: thin solid #5e72e4; + border: thin solid var(--primary); + background-color: #5e72e4; + background-color: var(--primary); + ; +} + +/* light blue */ +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit, +.cbi-button-edit, +.cbi-button-apply, +.cbi-button-reload, +.cbi-button-action, +.cbi-button[value="Submit"], +.cbi-button[value="Upload"], +.cbi-button[value$="Apply"], +.cbi-button[onclick="addKey(event)"] { + font-weight: normal; + color: #fff !important; + border: thin solid #5e72e4; + border: thin solid var(--primary); + + background-color: #5e72e4; + background-color: var(--primary); +} + +/* red */ +.btn.danger, +.cbi-section-remove>.cbi-button, +.cbi-button-remove, +.cbi-button-reset, +.cbi-button-negative, +.cbi-button[value="Stop"], +.cbi-button[value="Kill"], +.cbi-button[onclick="reboot(this)"], +.cbi-button-neutral[value="Restart"] { + font-weight: normal; + color: #fff; + border: thin solid #f5365c; + border: thin solid var(--red); + background-color: #f5365c; + background-color: var(--red); +} + +/* yellow */ +.btn[value="Dismiss"], +.cbi-button[value="Terminate"], +.cbi-button[value="Reset"], +.cbi-button[value="Disabled"], +.cbi-button[onclick^="iface_reconnect"], +.cbi-button[onclick="handleReset(event)"], +.cbi-button-neutral[value="Disable"] { + font-weight: normal; + color: #fff; + border: thin solid #eea236; + background-color: #f0ad4e; +} + +/* green */ +.cbi-button-success, +.cbi-button-download, +.cbi-button[name="backup"], +.cbi-button[value="Download"], +.cbi-button[value="Save mtdblock"] { + font-weight: normal; + color: #fff; + border: thin solid #4cae4c; + background-color: #5cb85c; +} + +.cbi-page-actions .cbi-button-link:first-child { + float: left; +} + +.a-to-btn { + text-decoration: none; +} + +.cbi-value-field .cbi-button-add { + font-weight: bold; + margin: 4px 0 4px 3px; + padding: 1px 6px; + display: flex; + align-items: center; +} + +.tabs { + margin: 0 0 1rem 0; + padding: 0 1rem; + background-color: #FFFFFF; + border-radius: 0.375rem; + box-shadow: 0 4px 8px rgba(0, 0, 0, .03); + white-space: nowrap; + overflow-x: auto; + + &::-webkit-scrollbar { + width: 1px; + height: 5px; + } + + &::-webkit-scrollbar-thumb { + background-color: #f6f9fc + } + + &::-webkit-scrollbar-track { + background-color: #fff; + } + + li[class~="active"], + li:hover { + cursor: pointer; + border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); + color: #5e72e4; + color: var(--primary); + background-color: #dce1fe; + margin-bottom: 0; + border-radius: 0; + + a { + color: #5e72e4; + color: var(--primary); + } + } + + li { + font-size: 0.875rem; + display: inline-block; + padding: 0.875rem 0rem; + border-bottom: 0.18751rem solid rgba(0, 0, 0, 0); + margin: 0; + transition: all 0.2s; + + a { + text-decoration: none; + color: #404040; + padding: 0.5rem 0.8rem; + } + + &:hover { + border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); + } + } +} + + + + +.cbi-tabmenu { + color: white; + padding: 0.5rem 1rem 0 1rem; + white-space: nowrap; + overflow-x: auto; + + &::-webkit-scrollbar { + width: 1px; + height: 5px; + } + + &::-webkit-scrollbar-thumb { + background-color: #f6f9fc + } + + &::-webkit-scrollbar-track { + background-color: #fff; + } + + li { + background: #dce3e9; + display: inline-block; + font-size: 0.875rem; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + padding: 0.5rem 0rem; + border-bottom: 0.18751rem solid rgba(0, 0, 0, 0); + margin: 0 0.2rem; + + a { + text-decoration: none; + color: #404040; + padding: 0.5rem 0.8rem; + } + + &:hover { + cursor: pointer; + border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); + color: #5e72e4; + color: var(--primary); + background-color: #dce1fe; + margin-bottom: 0; + + a { + color: #525f7f; + } + } + } + + li[class~="cbi-tab"] { + border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); + color: #5e72e4; + color: var(--primary); + background-color: #dce1fe; + margin-bottom: 0; + + a { + color: #5e72e4; + color: var(--primary); + } + } +} + +.cbi-tab-descr { + padding: 0.5rem 1.5rem; +} + +.cbi-section-node { + padding: 1rem 0; +} + +.cbi-section .cbi-section-remove:nth-of-type(2n), +.container>.cbi-section .cbi-section-node:nth-of-type(2n) { + background-color: #f9f9f9; +} + +[data-tab-title] { + overflow: hidden; + height: 0; + opacity: 0; + margin: 0; + padding: 0rem 0rem !important; + + p { + margin-left: 1rem; + margin-bottom: 1rem; + } +} + + + +[data-tab-active="true"] { + overflow: visible; + height: auto; + opacity: 1; + transition: opacity .25s ease-in; + margin: inherit !important; +} + + +.cbi-section[id] .cbi-section-remove:nth-of-type(4n+3), +.cbi-section[id] .cbi-section-node:nth-of-type(4n+4) { + background-color: #f9f9f9; +} + +.cbi-section-node-tabbed { + margin-top: 0; + padding: 0; + border: 0 solid #d4d4d4; + border-radius: 0.375rem; +} + +.cbi-tabcontainer>.cbi-value:nth-of-type(2n) { + background-color: #f9f9f9; +} + +.cbi-value-field, +.cbi-value-description { + line-height: 1.25; + display: table-cell; + + abbr { + color: #32325d; + color: var(--gray-dark); + } +} + +.cbi-value-description { + font-size: small; + padding: .5rem; + opacity: .5; +} + +.cbi-value-title { + display: table-cell; + float: left; + width: 23rem; + padding-top: .25rem; + padding-right: 2rem; + text-align: right; + word-wrap: break-word; +} + +.cbi-value { + display: inline-block; + width: 100%; + padding: .35rem 1rem .2rem 1rem; + line-height: 2.4rem; +} + +.cbi-value ul { + line-height: 1.25; +} + +.cbi-value-field .cbi-dropdown, +.cbi-value-field .cbi-input-select, +.cbi-value input[type="text"], +.cbi-value input[type="password"] { + min-width: 18rem; +} + +.cbi-value input[type="password"] { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + margin-right: 0; +} + +.cbi-value input[type="password"]+.cbi-button-neutral { + height: 42px; + border-bottom-left-radius: 0; + border-top-left-radius: 0; + margin-left: 0; + border: 0; +} + +#cbi-firewall-zone .cbi-input-select, +#cbi-network-switch_vlan .cbi-input-select { + min-width: 11rem; +} + +#cbi-network-switch_vlan .cbi-input-text { + max-width: 3rem; +} + +.cbi-input-invalid { + color: #f5365c; + border-bottom-color: #f5365c; +} + +.cbi-section-error { + font-weight: bold; + line-height: 1.42857143; + margin: 18px; + padding: 6px; + border: thin solid #f5365c; + border-radius: 3px; + background-color: #fce6e6; +} + +.cbi-section-error ul { + margin: 0 0 0 20px; +} + +.cbi-section-error ul li { + font-weight: bold; + color: #f5365c; +} + +.td[data-title]::before { + font-weight: bold; + display: none; + padding: .25rem 0; + content: attr(data-title) ":\20"; + text-align: left; + white-space: nowrap; +} + +.tr.placeholder .td[data-title]::before { + display: none; +} + +.tr[data-title]::before, +.tr.cbi-section-table-titles.named::before { + font-weight: bold; + display: table-cell; + align-self: center; + flex: 1 1 5%; + padding: .25rem; + content: attr(data-title) "\20"; + text-align: center; + vertical-align: middle; + white-space: normal; + word-wrap: break-word; +} + +.cbi-rowstyle-1 { + background-color: #f9f9f9; +} + +.cbi-rowstyle-2 { + background-color: #eee; +} + +.cbi-rowstyle-2 .cbi-button-up, +.cbi-rowstyle-2 .cbi-button-down, +body:not(.Interfaces) .cbi-rowstyle-2:first-child { + background-color: #fff !important; +} + +.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + width: auto !important; +} + +.td.cbi-section-actions { + text-align: right !important; + vertical-align: middle; +} + +.td.cbi-section-actions>* { + display: inline-flex; +} + +.td.cbi-section-actions>*>*, +.td.cbi-section-actions>*>form>* { + margin: 0 5px; + display: flex; + align-items: center; +} + +.td.cbi-section-actions>*>form { + display: inline-flex; + margin: 0; +} + +.cbi-checkbox { + margin: 0 0.25rem; +} + +/* lists */ +.cbi-dynlist { + line-height: 1.3; + flex-direction: column; + min-height: 30px; + cursor: text; +} + +.cbi-dynlist>.item { + position: relative; + max-width: 25rem; + pointer-events: none; + color: #8898aa; + outline: 0; +} + +.cbi-dynlist[name="sshkeys"]>.item { + max-width: none; +} + +.cbi-dynlist>.item::after { + position: absolute; + width: 2.2rem !important; + height: calc(100% - 0.5rem - 2px); + right: 0; + bottom: 0; + content: "\00D7"; + pointer-events: auto; + background-color: var(--red); + font-weight: normal; + font-size: 1.2rem; + display: flex; + align-items: center; + justify-content: center; + line-height: 1.5rem; + padding: 0; + margin: 0.25rem 0.1rem 0.25rem 0; + color: #fff; + border: 1px solid #f5365c; + border-radius: 0.25rem; + outline: 0; + background-image: none; + box-shadow: none; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.cbi-dynlist>.item>span { + white-space: normal; + word-break: break-word; + line-height: 1.5rem; + padding: 0.5rem 0.5rem; + margin: 0.25rem 0.1rem; + color: #8898aa; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + outline: 0; + background-image: none; + box-shadow: none; + display: block; + transition: box-shadow 0.15s ease; + box-sizing: border-box; + min-width: 15rem; +} + +.cbi-dynlist>.add-item { + display: inline-flex; + align-items: center; + width: 100%; + min-width: 16rem; +} + +.cbi-dynlist>.add-item input { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + margin-right: 0; + border-right: none; +} + +.cbi-dynlist>.add-item .cbi-button-add { + font-weight: normal; + font-size: 1.2rem; + display: flex; + align-items: center; + line-height: 1.5rem; + padding: 0.5rem 0.75rem; + margin: 0.25rem 0.1rem 0.25rem 0; + color: #fff; + border: 1px solid #5e72e4; + border: 1px solid var(--primary); + border-radius: 0.25rem; + outline: 0; + background-image: none; + box-shadow: none; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.cbi-dynlist>.add-item:not([ondrop])>input { + overflow: hidden; + width: 100%; + min-width: 15rem; + white-space: nowrap; + text-overflow: ellipsis; +} + +.cbi-dynlist>.add-item[ondrop]>input { + min-width: 13rem; +} + +.cbi-dynlist, +.cbi-dropdown { + position: relative; + display: inline-flex; + padding: 0.2rem 0.2rem; +} + +.cbi-dropdown[placeholder*="select"] { + max-width: 25rem; + height: auto; + margin-top: -3px; +} + +.cbi-dropdown>ul { + display: flex; + overflow-x: hidden; + overflow-y: auto; + width: 100%; + margin: 0 !important; + padding: 0; + list-style: none; + outline: 0; +} + + +.cbi-dropdown>ul.preview { + display: none; + +} + +.cbi-button-apply>ul.preview { + display: none; + + li { + color: #fff; + } + +} + +.cbi-button-apply>ul:first-child { + li { + color: #fff; + } + +} + +.cbi-dropdown>.open { + flex-basis: 15px; +} + +.cbi-dropdown>.open, +.cbi-dropdown>.more { + font-size: 1rem; + font-weight: 900; + line-height: 2; + display: flex; + flex-direction: column; + flex-grow: 0; + flex-shrink: 0; + justify-content: center; + padding: 0 .25em; + cursor: default; + text-align: center; + outline: 0; +} + +.cbi-dropdown>.more, +.cbi-dropdown>ul>li[placeholder] { + font-weight: bold; + display: none; + color: #777; + text-shadow: 1px 1px 0 #fff; +} + +.cbi-dropdown>ul>li { + display: none; + overflow: hidden; + align-items: center; + align-self: center; + flex-grow: 1; + flex-shrink: 1; + min-height: 20px; + padding: .25em; + white-space: nowrap; + text-overflow: ellipsis; + +} + +.cbi-dropdown>ul>li .hide-open { + display: initial; +} + +.cbi-dropdown>ul>li .hide-close { + display: none; +} + +.cbi-dropdown>ul>li[display]:not([display="0"]) { + border-left: thin solid #ccc; +} + +.cbi-dropdown[empty]>ul { + max-width: 1px; +} + +.cbi-dropdown>ul>li>form { + display: none; + margin: 0; + padding: 0; + pointer-events: none; +} + +.cbi-dropdown>ul>li img { + margin-right: .25em; + vertical-align: middle; +} + +.cbi-dropdown>ul>li>form>input[type="checkbox"] { + height: auto; + margin: 0; +} + +.cbi-dropdown>ul>li input[type="text"] { + height: 20px; +} + +.cbi-dropdown[open]>ul.dropdown { + position: absolute; + z-index: 1100; + display: block; + width: auto; + min-width: 100%; + max-width: none; + max-height: 200px !important; + border: 0 solid #918e8c; + background: #ffffff; + box-shadow: 0 0 4px #918e8c; + border-bottom-left-radius: 0.35rem; + border-bottom-right-radius: 0.35rem; + color: var(--main-menu-color); + margin-left: -0.2rem !important; + + li { + color: #000; + } +} + + +.cbi-dropdown>ul>li[display], +.cbi-dropdown[open]>ul.preview, +.cbi-dropdown[open]>ul.dropdown>li, +.cbi-dropdown[multiple]>ul>li>label, +.cbi-dropdown[multiple][open]>ul.dropdown>li, +.cbi-dropdown[multiple][more]>.more, +.cbi-dropdown[multiple][empty]>.more { + display: flex; + align-items: center; + flex-grow: 1; + +} + +.cbi-dropdown[empty]>ul>li, +.cbi-dropdown[optional][open]>ul.dropdown>li[placeholder], +.cbi-dropdown[multiple][open]>ul.dropdown>li>form { + display: block; +} + +.cbi-dropdown[open]>ul.dropdown>li .hide-open { + display: none; +} + +.cbi-dropdown[open]>ul.dropdown>li .hide-close { + display: initial; +} + +.cbi-dropdown[open]>ul.dropdown>li { + border-bottom: thin solid #ccc; + padding: 0.5rem 0.8rem; +} + +.cbi-dropdown[open]>ul.dropdown>li label { + margin-left: 0.5rem; +} + +.cbi-dropdown[open]>ul.dropdown>li[selected] { + background: #dce1fe; +} + +.cbi-dropdown[open]>ul.dropdown>li.focus { + background: #dce1fe; + outline: none; +} + +.cbi-dropdown[open]>ul.dropdown>li:last-child { + margin-bottom: 0; + border-bottom: 0; +} + +.cbi-dropdown[open]>ul.dropdown>li[unselectable] { + opacity: .7; +} + +.cbi-dropdown[open]>ul.dropdown>li>input.create-item-input:first-child:last-child { + width: 100%; +} + +.cbi-dropdown[disabled] { + pointer-events: none; + opacity: .6; +} + +.cbi-dropdown .zonebadge { + width: 100%; +} + +.cbi-dropdown[open] .zonebadge { + width: auto; +} + +/* progressbar */ +.cbi-progressbar { + position: relative; + min-width: 11rem; + height: 1.5rem; + margin: 0 0; + border: thin solid #999; + background: #eee; + border-radius: 4px; + overflow: hidden; +} + +.cbi-progressbar>div { + width: 0; + height: 100%; + transition: width .25s ease-in; + background: #5bc0de; + background: var(--bar-bg); +} + +.cbi-progressbar::after { + font-family: monospace; + font-size: 1em; + font-weight: bold; + font-size-adjust: .38; + line-height: 1.5rem; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: hidden; + content: attr(title); + text-align: center; + white-space: pre; + text-overflow: ellipsis; +} + +#modal_overlay { + position: fixed; + z-index: 900; + top: 0; + right: 10000px; + bottom: 0; + left: -10000px; + overflow-y: scroll; + transition: opacity .125s ease-in; + opacity: 0; + background: rgba(0, 0, 0, .7); + -webkit-overflow-scrolling: touch; +} + +.modal { + display: flex; + align-items: center; + flex-wrap: wrap; + width: 90%; + min-width: 270px; + max-width: 600px; + min-height: 32px; + margin: 5em auto; + padding: 1em; + border-radius: 3px !important; + background: #fff; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); +} + +.modal>* { + line-height: normal; + flex-basis: 100%; + margin-bottom: .5em; + max-width: 100%; +} + +.modal>pre, +.modal>textarea { + font-size: 1rem; + font-size-adjust: .35; + overflow: auto; + margin-bottom: .5em; + padding: 8.5px; + cursor: auto; + white-space: pre-wrap; + color: #eee; + outline: 0; + background-color: #101010; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); +} + +.modal>h4 { + margin: .5em 0; +} + +.modal ul { + margin-left: 2.2em; +} + +.modal li { + list-style-type: square; + color: #808080; +} + +.modal p { + + word-break: break-word; +} + +.modal .label { + font-size: .6rem; + font-weight: normal; + padding: .1rem .3rem; + padding-bottom: 0; + cursor: default; + border-radius: 0; +} + +.modal .label.warning { + background-color: #f0ad4e !important; +} + +.modal .btn { + padding: 0.45rem 0.8rem; +} + +.modal.cbi-modal { + max-width: 90%; + max-height: none; +} + +body.modal-overlay-active { + overflow: hidden; + height: 100vh; +} + +body.modal-overlay-active #modal_overlay { + right: 0; + left: 0; + opacity: 1; +} + + + +.spinning { + position: relative; + padding-left: 32px !important; +} + +.spinning::before { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + width: 32px; + content: ""; + background: url(/luci-static/resources/icons/loading.gif) no-repeat center; + background-size: 16px; +} + +/* luci */ +.hidden { + display: none; +} + +.left, +.left::before { + text-align: left !important; +} + +.right, +.right::before { + text-align: right !important; +} + +.center, +.center::before { + text-align: center !important; +} + +.top { + align-self: flex-start !important; + vertical-align: top !important; +} + +.bottom { + align-self: flex-end !important; + vertical-align: bottom !important; +} + +.inline { + display: inline; +} + +.cbi-page-actions { + padding-top: 1rem; + text-align: right; + justify-content: flex-end; +} + +.cbi-page-actions>form[method="post"] { + display: inline-block; +} + +.th[data-type="button"], +.td[data-type="button"], +.th[data-type="fvalue"], +.td[data-type="fvalue"] { + flex: 1 1 2em; + text-align: center; +} + +.ifacebadge { + display: inline-flex; + gap: .2rem; + padding: .5rem .8rem; + border-bottom: thin solid #ccc; + background: #eee; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); + border-radius: 4px; +} + +td>.ifacebadge, +.td>.ifacebadge { + font-size: .8rem; + background-color: #f0f0f0; +} + +.ifacebadge>em, +.ifacebadge>img { + display: inline-block; + align-self: flex-start; +} + +.ifacebadge>img+img { + margin: 0 .2rem 0 0; +} + +.network-status-table { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox { + flex-grow: 1; + border-radius: 4px; + overflow: hidden; + margin: 0 1.25rem 1rem 1.25rem; +} + +.network-status-table .ifacebox-body { + display: flex; + flex-direction: column; + height: 100%; + gap: 0.5em; +} + +.network-status-table .ifacebox-body>span { + flex: 10 10 auto; + height: 100%; +} + +.network-status-table .ifacebox-body>div { + display: flex; + flex-wrap: wrap; + gap: .5rem; +} + +.network-status-table .ifacebox-body .ifacebadge { + align-items: center; + flex: 1 1 auto; + min-width: 220px; + padding: .5em; + background-color: #fff; + + >span { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } +} + +/* textarea */ +.cbi-input-textarea { + font-family: monospace; + width: 100%; + font-size: 0.875rem; + min-height: 14rem; + padding: .8rem; + color: #000; +} + +#syslog { + font-size: small; + line-height: 1.25; + overflow-y: hidden; + width: 100%; + min-height: 15rem; + padding: 1rem; + resize: none; + color: #242424; + border: 0; + border-radius: 0.375rem; + background-color: #ffffff; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); +} + +#syslog:focus { + outline: 0; +} + +/* config changes */ +.uci-change-list { + font-family: monospace; +} + +.uci-change-list ins, +.uci-change-legend-label ins { + display: block; + padding: 2px; + text-decoration: none; + border: thin solid #0f0; + background-color: #cfc; +} + +.uci-change-list del, +.uci-change-legend-label del { + font-style: normal; + display: block; + padding: 2px; + text-decoration: none; + border: thin solid #f00; + background-color: #fcc; +} + +.uci-change-list var, +.uci-change-legend-label var { + font-style: normal; + display: block; + padding: 2px; + text-decoration: none; + border: thin solid #ccc; + background-color: #eee; +} + +.uci-change-list var ins, +.uci-change-list var del { + font-style: normal; + padding: 0; + white-space: pre; + border: 0; +} + +.uci-change-legend { + padding: 5px; +} + +.uci-change-legend-label { + float: left; + width: 150px; +} + +.uci-change-legend-label>ins, +.uci-change-legend-label>del, +.uci-change-legend-label>var { + display: block; + float: left; + width: 10px; + height: 10px; + margin-right: 4px; +} + +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + line-height: .4; + border: 0; +} + +.uci-change-list var, +.uci-change-list del, +.uci-change-list ins { + padding: .5rem; +} + +/* other fix */ +#iwsvg, +#iwsvg2, +#bwsvg { + border: thin solid #d4d4d4 !important; +} + +#iwsvg, +[data-page="admin-status-realtime-bandwidth"] #bwsvg { + border-top: 0 !important; +} + +.ifacebox { + line-height: 1.25; + display: inline-flex; + overflow: hidden; + flex-direction: column; + border-radius: 4px; + min-width: 100px; + border-bottom: thin solid #ccc; + background-color: #f9f9f9; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .4), 0 1px 2px rgba(0, 0, 0, .2); +} + +.ifacebox-head { + padding: .25em; + background: #eee; +} + +.ifacebox-head.active { + background: #5e72e4; + background: var(--primary); + + * { + color: #fff; + color: var(--white); + } + +} + +.ifacebox-body { + padding: 0.875rem 1rem; + line-height: 1.6em; +} + +.cbi-image-button { + margin-left: .5rem; +} + +.zonebadge { + display: inline-block; + padding: .2rem .5rem; + border-radius: 4px; +} + +.zonebadge .ifacebadge { + margin: .1rem .2rem; + padding: .2rem .3rem; + border: thin solid #6c6c6c; +} + +.zonebadge>input[type="text"] { + min-width: 10rem; + margin-top: .3rem; + padding: .16rem 1rem; +} + +.zonebadge>em, +.zonebadge>strong { + display: inline-block; + margin: 0 .2rem; +} + +.cbi-value-field .cbi-input-checkbox, +.cbi-value-field .cbi-input-radio { + margin-top: .1rem; +} + +.cbi-value-field>ul>li { + display: flex; +} + +.cbi-value-field>ul>li>label { + margin-top: .5rem; +} + +.cbi-value-field>ul>li .ifacebadge { + margin-top: -.5rem; + margin-left: .4rem; + background-color: #eee; +} + +.cbi-section-table-row>.cbi-value-field .cbi-dropdown { + min-width: 3rem; +} + +.cbi-section-create { + display: inline-flex; + align-items: center; + margin: 0.25rem 1.25rem; +} + +.cbi-section-create>* { + margin: .5rem 0; +} + +.cbi-section-remove { + padding: .5rem; +} + +div.cbi-value var, +td.cbi-value-field var, +.td.cbi-value-field var { + font-style: italic; + color: #0069d6; +} + +.cbi-optionals { + padding: 1rem 1rem 0 1rem; + border-top: thin solid #ccc; +} + +.cbi-dropdown-container { + position: relative; +} + +.cbi-tooltip-container, +span[data-tooltip], +span[data-tooltip] .label { + cursor: help !important; +} + +.cbi-tooltip { + position: absolute; + z-index: 1000; + left: -1000px; + padding: 2px 5px; + transition: opacity .25s ease-out; + white-space: pre; + pointer-events: none; + opacity: 0; + border-radius: 3px; + background: #fff; + box-shadow: 0 0 2px #444; +} + +.cbi-tooltip-container:hover .cbi-tooltip { + left: auto; + transition: opacity .25s ease-in; + opacity: 1; +} + +.zonebadge .cbi-tooltip { + margin: -1.5rem 0 0 -.5rem; + padding: .25rem; + background: inherit; +} + +.zonebadge-empty { + color: #404040; + background: repeating-linear-gradient(45deg, rgba(204, 204, 204, .5), rgba(204, 204, 204, .5) 5px, rgba(255, 255, 255, .5) 5px, rgba(255, 255, 255, .5) 10px); +} + +.zone-forwards { + display: flex; + min-width: 10rem; +} + +.zone-forwards>* { + flex: 1 1 45%; +} + +.zone-forwards>span { + flex-basis: 10%; + padding: 0 .25rem; + text-align: center; +} + +.zone-forwards .zone-src, +.zone-forwards .zone-dest { + display: flex; + flex-direction: column; +} + +.label { + font-size: .8rem; + font-weight: bold; + padding: .3rem .8rem; + white-space: nowrap; + text-decoration: none; + text-transform: uppercase; + color: #fff !important; + border-radius: 3px; + background-color: #bfbfbf; + text-shadow: none; +} + +label>input[type="checkbox"], +label>input[type="radio"] { + position: relative; + top: .4rem; + right: .2rem; + margin: 0; + vertical-align: bottom; +} + +label[data-index][data-depends] { + padding-right: 2em; +} + +.showSide { + display: none; +} + +.darkMask { + position: fixed; + z-index: 99; + display: none; + width: 100%; + height: 100%; + content: ""; + top: 0; + background-color: rgba(0, 0, 0, .56); + transition: all 0.2s; + + &.active { + display: block; + } +} + +/* diagnostics */ +#diag-rc-output>pre, +#command-rc-output>pre, +[data-page="admin-services-wol"] .notice code { + font-size: 1.2rem; + font-size-adjust: .35; + line-height: normal; + display: block; + overflow-y: hidden; + width: 100%; + padding: 8.5px; + white-space: pre; + color: #eee; + background-color: #101010; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); +} + +[data-page="admin-network-diagnostics"] .table { + box-shadow: none; +} + +input[name="ping"], +input[name="traceroute"], +input[name="nslookup"] { + width: 80%; +} + + + +/* fix status */ +.node-status-overview>.main fieldset:nth-child(4) .td:nth-child(2), +.node-status-processes>.main .table .tr .td:nth-child(3) { + white-space: normal; +} + +/* fix system reboot */ +[data-page="admin-system-reboot"] p { + padding-left: 1.5rem; +} + +[data-page="admin-system-reboot"] .cbi-button { + background: #fb6340 !important; +} + +[data-page="admin-system-reboot"] p>span { + position: relative; + top: .1rem; + left: 1rem; +} + +[data-page="admin-vpn-passwall"] h4 { + background: transparent; +} + +/* samba */ +#cbi-samba [data-tab="template"] .cbi-value-field { + display: block; +} + +#cbi-samba [data-tab="template"] .cbi-value-title { + width: auto; + padding-bottom: .6rem; +} + +/* admin-system-admin-password */ +[data-page="admin-system-admin"] .cbi-map h2, +[data-page="admin-system-admin-password"] .cbi-map h2, +[data-page="admin-system-admin"] .cbi-map .cbi-map-descr, +[data-page="admin-system-admin-password"] .cbi-map .cbi-map-descr { + margin-left: 0; + color: #32325d; + color: var(--gray-dark); +} + + +/* software */ +[data-page="admin-system-opkg"] h2 { + margin-left: 0; + color: #32325d; + color: var(--gray-dark); +} + +.controls { + margin: .5em 1rem 1em 1rem !important; +} + +.controls>*>.btn:not([aria-label$="page"]) { + flex-grow: initial !important; + margin-top: .25rem; +} + +.controls>#pager>.btn[aria-label$="page"] { + font-size: 1.4rem; + font-weight: bold; +} + +.controls>*>label { + margin-bottom: .2rem; +} + +[data-page="admin-system-opkg"] div.btn { + line-height: 3; + display: inline; + padding: .3rem .6rem; +} + +[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear), +[data-page="admin-system-opkg"] #maincontent>.container { + margin-top: 2rem; + padding-top: .1rem; +} + +[data-page="admin-system-opkg"] #maincontent>.container { + margin: 0 1.25rem 1rem 1.25rem; + margin-bottom: 1rem; +} + +.td.version, +.td.size { + white-space: normal !important; + word-break: break-word; +} + +.cbi-tabmenu+.cbi-section { + margin-top: 0; +} + +/* admin-system-crontab*/ +[data-page="admin-system-crontab"] #view p { + margin-bottom: 1rem; +} + +/*admin-system-flash*/ + +[data-page="admin-system-flash"] { + .cbi-value { + padding: 0; + } + + .cbi-section { + .cbi-section { + margin-top: 0; + } + } + + .cbi-map-tabbed { + border-radius: 0.375rem; + } + + legend { + display: block !important; + font-size: 1.2rem; + width: 100%; + display: block; + margin-bottom: 0; + padding: 1rem 0 1rem 1.5rem; + border-bottom: 1px solid rgba(0, 0, 0, .05); + line-height: 1.5; + margin-bottom: 0rem; + letter-spacing: 0.1rem; + color: #32325d; + font-weight: bold; + } + + .cbi-section-descr { + font-weight: 600; + padding: 1rem 0 1rem 1.5rem; + color: #525f7f; + } + + .modal { + + + label>input[type="checkbox"] { + top: -0.35rem; + } + + .btn { + white-space: normal !important; + } + } +} + +/* wireless overview */ +#cbi-wireless>#wifi_assoclist_table>.tr { + box-shadow: inset 1px -1px 0 #ddd, inset -1px -1px 0 #ddd; +} + +#cbi-wireless>#wifi_assoclist_table>.tr.placeholder>.td { + right: 33px; + bottom: 33px; + left: 33px; + border-top: thin solid #ddd !important; +} + +#cbi-wireless>#wifi_assoclist_table>.tr.table-titles { + box-shadow: inset 1px 0 0 #ddd, inset -1px 0 0 #ddd; +} + +#cbi-wireless>#wifi_assoclist_table>.tr.table-titles>.th { + border-bottom: thin solid #ddd; + box-shadow: 0 -1px 0 0 #ddd; +} + +#wifi_assoclist_table>.tr>.td[data-title="RX Rate / TX Rate"] { + width: 23rem; +} + +[data-page="admin-network-dhcp"] .cbi-value { + padding: 0; + +} + +[data-page="admin-network-dhcp"] [data-tab-active="true"] { + padding: 1rem 0 !important; +} + +/* firewall */ +#iptables { + margin: 0; +} + +.Firewall form { + margin: 2rem 2rem 0 0; + padding: 0; + box-shadow: none; +} + +#cbi-firewall-redirect table *, +#cbi-network-switch_vlan table *, +#cbi-firewall-zone table * { + font-size: small; +} + +#cbi-firewall-redirect table input[type="text"], +#cbi-network-switch_vlan table input[type="text"], +#cbi-firewall-zone table input[type="text"] { + width: 5rem; +} + +#cbi-firewall-redirect table select, +#cbi-network-switch_vlan table select, +#cbi-firewall-zone table select { + min-width: 3.5rem; +} + +#cbi-network-switch_vlan .th, +#cbi-network-switch_vlan .td { + flex-basis: 12%; +} + +#cbi-firewall-zone .table, +#cbi-network-switch_vlan .table { + display: block; +} + +#cbi-firewall-zone .td, +#cbi-network-switch_vlan .td { + width: 100%; +} + +[data-page="admin-network-firewall-custom"] #view p, +[data-page="admin-status-routes"] #view p { + padding: 0 1.5rem; + margin-bottom: 1rem; + + textarea { + padding: 1rem; + border-radius: 0.375rem; + } +} + +/* applyreboot fix */ +#applyreboot-container { + margin: 2rem; +} + +#applyreboot-section { + line-height: 300%; + margin: 2rem; +} + +/* openvpn bug fix */ +.OpenVPN a { + line-height: initial !important; +} + +/* custom commands */ +.commandbox { + width: 24% !important; + margin: 10px 0 0 10px !important; + padding: .5rem 1rem; + border-bottom: thin solid #ccc; + background: #eee; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); +} + +.commandbox h3 { + line-height: normal !important; + overflow: hidden; + margin: 6px 0 !important; + white-space: nowrap; + text-overflow: ellipsis; +} + +.commandbox div { + left: auto !important; +} + +.commandbox code { + position: absolute; + overflow: hidden; + max-width: 60%; + margin-left: 4px; + padding: 2px 3px; + white-space: nowrap; + text-overflow: ellipsis; +} + +.commandbox code:hover { + overflow-y: auto; + max-height: 50px; + white-space: normal; +} + +.commandbox p:first-of-type { + margin-top: -6px; +} + +.commandbox p:nth-of-type(2) { + margin-top: 2px; +} + +[data-page^="admin-system-commands"] .panel-title, +[data-page^="command-cfg"] .mobile-hide, +[data-page^="command-cfg"] .showSide { + display: none; +} + +#command-rc-output .alert-message { + line-height: 1.42857143; + position: absolute; + top: 40px; + right: 32px; + max-width: 40%; + margin: 0; + animation: anim-fade-in 1.5s forwards; + word-break: break-word; + opacity: 0; +} + +@keyframes anim-fade-in { + 100% { + opacity: 1; + } +} + +/* other fix */ +input[type="checkbox"] { + appearance: none !important; + -webkit-appearance: none !important; + border: 1px solid #dee2e6; + + width: 16px !important; + height: 16px !important; + padding: 0; + cursor: pointer; + transition: all 0.2s; + margin: 1rem 0 0 0; +} + +input[type="checkbox"]:checked { + border: 1px solid #5e72e4; + border: 1px solid var(--primary); + background-image: url('data:image/svg+xml,%3csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3e%3cpath fill=\'%23fff\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3e%3c/svg%3e') !important; + background-color: #5e72e4; + background-color: var(--primary); + background-size: 70%; + background-repeat: no-repeat; + background-position: center; +} + +.fb-container .cbi-button { + height: auto !important; +} + +#cbi-usb_printer-printer em { + display: block; + padding: 1rem; + text-align: center; +} + +pre.command-output { + padding: 1.5rem; +} + +[data-page="admin-nlbw-display"] .cbi-section[data-tab="export"] { + padding: 1.5rem !important; +} + +[data-page="admin-nlbw-backup"] form { + padding-left: 1.5rem; +} + +[data-page="admin-status-iptables"] .right { + margin-bottom: 0 !important; +} + +/* IE hacks */ +@media all and (-ms-high-contrast: none) { + .main>.main-left>.nav>.slide>.menu::before { + top: 30.25%; + } + + .main>.main-left>.nav>li:last-child::before { + top: 20%; + } + + .showSide::before { + top: -12px; + } +} + +@media screen and (max-width: 1600px) { + header>.fill>.container>#logo { + margin: 0 2.5rem 0 .5rem; + } + + .main-left { + width: calc(0% + 13rem); + } + + .main-right { + width: calc(100% - 13rem); + } + + .btn:not(button), + .cbi-button { + font-size: .8rem; + } + + .label { + padding: .2rem .6rem; + } + + + .cbi-value-title { + width: 15rem; + padding-right: .6rem; + } + + .cbi-value-field .cbi-dropdown, + .cbi-value-field .cbi-input-select, + .cbi-value input[type="text"], + .cbi-value input[type="password"] { + min-width: 18rem; + } + + #cbi-firewall-zone .cbi-input-select { + min-width: 9rem; + } + + .cbi-input-textarea { + font-size: small; + } + + .node-admin-status>.main fieldset li>a { + padding: .3rem .6rem; + } +} + +@media screen and (max-width: 1366px) { + + + header>.fill>.container { + + cursor: default; + } + + + + .main-left { + width: calc(0% + 13rem); + } + + .main-right { + width: calc(100% - 13rem); + } + + + .tabs>li>a, + .cbi-tabmenu>li>a { + padding: .2rem .8rem; + } + + .panel-title { + font-size: 1.1rem; + padding-bottom: 1rem; + } + + table { + font-size: .7rem !important; + width: 100% !important; + } + + .table .cbi-input-text { + width: 100%; + } + + .cbi-value-field .cbi-dropdown, + .cbi-value-field .cbi-input-select, + .cbi-value input[type="text"], + .cbi-value input[type="password"] { + min-width: 16rem; + } + + #cbi-firewall-zone .cbi-input-select { + min-width: 4rem; + } + + .main>.main-left>.nav>li, + .main>.main-left>.nav>li>a, + .main .main-left .nav>li>a:first-child, + .main>.main-left>.nav>.slide>.menu, + .main>.main-left>.nav>li>[data-title="Logout"] { + font-size: .9rem; + } + + .main>.main-left>.nav>.slide>.slide-menu>li>a { + font-size: .7rem; + } + + #modal_overlay { + top: 0rem; + } + + [data-page="admin-network-firewall-forwards"] .table:not(.cbi-section-table) { + display: block; + } + + [data-page="admin-network-firewall-forwards"] .table:not(.cbi-section-table), + [data-page="admin-network-firewall-rules"] .table:not(.cbi-section-table), + [data-page="admin-network-hosts"] .table, + [data-page="admin-network-routes"] .table { + overflow-y: visible; + } + + .commandbox { + width: 32% !important; + } + + .btn:not(button), + .cbi-button { + font-size: 0.8rem; + + } +} + +@media screen and (max-width: 1152px) { + header>.fill>.container>#logo { + display: none; + } + + header>.fill>.container>.brand { + position: relative; + } + + html, + .main { + overflow-y: visible; + } + + .main>.loading>span { + top: 25%; + } + + .main-left { + width: calc(0% + 13rem); + } + + .main-right { + width: calc(100% - 13rem); + } + + + + body:not(.logged-in) .showSide { + visibility: hidden; + width: 0; + margin: 0; + } + + .node-main-login>.main .cbi-value-title { + text-align: left; + } + + .cbi-value-title { + width: 12rem; + padding-right: 1rem; + } + + .cbi-value-field .cbi-dropdown, + .cbi-value-field .cbi-input-select, + .cbi-value input[type="text"] { + width: 16rem; + min-width: 16rem; + } + + /*.cbi-value input[type="password"],*/ + .cbi-value input[name^="pw"], + .cbi-value input[data-update="change"]:nth-child(2) { + width: 13rem !important; + min-width: 13rem; + } + + #diag-rc-output>pre, + #command-rc-output>pre, + [data-page="admin-services-wol"] .notice code { + font-size: 1rem; + } + + .table { + display: block; + } + + .Interfaces .table { + overflow-x: hidden; + } + + #packages.table { + display: grid; + } + + .tr { + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + + .Overview .table[width="100%"]>.tr { + flex-wrap: nowrap; + } + + .tr.placeholder { + border-bottom: thin solid #ddd; + } + + .tr.placeholder>.td, + #cbi-firewall .tr>.td, + #cbi-network .tr:nth-child(2)>.td, + .cbi-section #wifi_assoclist_table .tr>.td { + border-top: 0; + } + + .th, + .td { + display: inline-block; + align-self: flex-start; + flex: 2 2 10%; + text-overflow: ellipsis; + word-wrap: break-word; + } + + .td select, + .td input[type="text"] { + width: 100%; + word-wrap: normal; + } + + .td [data-dynlist]>input, + .td input.cbi-input-password { + width: calc(100% - 1.5rem); + } + + .td[data-type="button"], + .td[data-type="fvalue"] { + flex: 1 1 12.5%; + text-align: left; + } + + .th.cbi-value-field, + .td.cbi-value-field, + .th.cbi-section-table-cell, + .td.cbi-section-table-cell { + flex-basis: auto; + padding-top: 1rem; + } + + .cbi-section-table-row { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + } + + .td.cbi-value-field, + .cbi-section-table-cell { + display: inline-block; + flex: 10 10 auto; + flex-basis: 50%; + text-align: center; + } + + .td.cbi-section-actions { + vertical-align: bottom; + } + + .tr.table-titles, + .tr.cbi-section-table-titles, + .tr.cbi-section-table-descr { + display: none; + } + + .tr[data-title]::before, + .tr.cbi-section-table-titles.named::before { + font-size: .9rem; + display: block; + flex: 1 1 100%; + border-bottom: thin solid rgba(0, 0, 0, .26); + background: #e9ecef; + } + + .td[data-title], + [data-page^="admin-status-realtime"] .td[id] { + text-align: left; + } + + .td[data-title]::before { + display: block; + } + + .cbi-button+.cbi-button { + margin-left: 0; + } + + .td.cbi-section-actions>*>*, + .td.cbi-section-actions>*>form>* { + margin: 2.1px 3px; + } + + .Firewall form { + position: static !important; + margin: 0 0 2rem 0; + padding: 2rem; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + } + + .Firewall form input { + width: 100% !important; + margin: 0; + margin-top: 1rem; + } + + .Firewall .center, + .Firewall .center::before { + text-align: left !important; + } + + .commandbox { + width: 100% !important; + margin-left: 0 !important; + } + + .btn:not(button), + .cbi-button { + font-size: 0.8rem; + } +} + + + + +@media screen and (max-width: 768px) { + body { + font-size: .8rem; + } + + .cbi-progressbar::after { + font-size: .6rem; + } + + + + .main-left { + position: fixed; + z-index: 100; + width: 0; + + &.active { + width: 13rem; + } + } + + .main-right { + width: 100%; + + &.active { + overflow-y: hidden; + } + } + + .darkMask.active { + display: block; + } + + .showSide { + padding: 0.1rem; + position: relative; + z-index: 99; + display: inline-block !important; + + &::before { + font-family: 'argon' !important; + font-style: normal !important; + font-weight: normal !important; + font-variant: normal !important; + text-transform: none !important; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: "\e20e"; + font-size: 1.7rem; + } + } + + + header>.fill>.container>.flex1>.brand { + display: inline-block; + } + + + + .main>.main-left>.nav>.slide>.slide-menu>li>a { + font-size: 0.8rem; + } + + + +} + +@media screen and (max-width: 600px) { + .mobile-hide { + display: none; + } + + #maincontent>.container { + margin: 0 1rem 1rem 1rem; + } + + .cbi-value-title { + text-align: left; + } + + [data-page="admin-system-flash"] legend { + padding: 1rem 0 1rem 1rem; + + } + + [data-page="admin-system-flash"] .cbi-section-descr { + padding: 1rem 0 1rem 1rem; + + } + + [data-page="admin-system-flash"] .cbi-value { + padding: 0 1rem; + } + + [data-page="admin-network-dhcp"] [data-tab-active="true"] { + padding: 1rem 1rem !important; + } + + .cbi-dynlist p { + padding: 0.5rem 1rem; + } + + body { + overflow-x: hidden; + } + + .node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-field { + width: 16rem; + } + + .node-main-login footer { + display: none; + } + + .tabs, + .cbi-tabmenu { + &::-webkit-scrollbar { + width: 0px; + height: 0px; + } + } + + .cbi-value-field, + .cbi-value-description { + display: block !important; + padding-left: 0 !important; + padding-right: 0 !important; + } + + [data-page="admin-system-admin-password"] .cbi-value-field { + display: table-cell !important; + } + + .modal.cbi-modal { + max-width: 100%; + max-height: none; + } + + .modal { + display: flex; + align-items: center; + flex-wrap: wrap; + width: 100%; + min-width: 270px; + max-width: 600px; + min-height: 32px; + margin: 5em auto; + padding: 1em; + border-radius: 3px !important; + background: #fff; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12); + } + + .cbi-dropdown[open]>ul.dropdown { + left: 0.2rem !important; + right: 0 !important; + margin-bottom: 1rem; + } + + .login-page .login-container footer { + display: none; + } +} + + + +@media screen and (min-width: 600px) { + ::-webkit-scrollbar { + width: 10px; + height: 10px; + } + + ::-webkit-scrollbar, + ::-webkit-scrollbar-corner { + background: transparent; + } + + ::-webkit-scrollbar-thumb { + background: #9e9e9e; + } + + ::-webkit-scrollbar-thumb:hover { + background: #757575; + } + + ::-webkit-scrollbar-thumb:active { + background: #424242; + } + + + + +} + + + +@media screen and (max-width: 480px) { + .mobile-hide { + display: none; + } + + .login-page .login-container { + margin-left: 0rem !important; + width: 100%; + + .login-form { + .form-login { + .input-group { + &::before { + color: #525461; + } + + input { + color: #525461; + border-bottom: white 1px solid; + border-bottom: var(--white) 1px solid; + border-radius: 0; + } + + } + } + } + + } + + +} \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/less/dark.less b/luci-theme-argon/htdocs/luci-static/argon/less/dark.less new file mode 100755 index 000000000..1e0568ad6 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/less/dark.less @@ -0,0 +1,830 @@ +// compress: true , sourceMap: false +/** + * Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material and Argon Template + * + * luci-theme-argon + * Copyright 2020 Jerryk + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/jerrykuku/luci-theme-argon/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth + * Copyright 2008 Jo-Philipp Wich + * Copyright 2012 David Menting + * + * MUI: + * https://github.com/muicss/mui + * + * luci-theme-material: + * https://github.com/LuttyYang/luci-theme-material/ + * + * Agron Theme + * https://demos.creative-tim.com/argon-dashboard/index.html + * + * Login background + * https://unsplash.com/ + * + * Licensed to the public under the Apache License 2.0 + */ + +body { + background: #1e1e1e; + color: #cccccc; +} + +.login-page .login-container { + + .login-form { + background-color: #1e1e1e; + -webkit-backdrop-filter: blur(var(--blur-radius-dark)); + backdrop-filter: blur(var(--blur-radius-dark)); + background-color: rgba(0, 0, 0, var(--blur-opacity-dark)); + + .brand { + color: #adb5bd; + } + + .form-login { + .input-group { + &::before { + color: #adb5bd; + } + + input { + background-color: transparent !important; + color: #adb5bd; + border-bottom: #adb5bd 1px solid !important; + border-radius: 0 !important; + border-top: none !important; + border-left: none !important; + border-right: none !important; + box-shadow: none; + } + + } + + .cbi-button-apply { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + + &:hover, + &:focus { + opacity: 0.9; + } + } + } + } + +} + +header::after { + background-color: #1e1e1e !important; +} + + +.main { + .main-left { + + background-color: #333333 !important; + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .15); + + .sidenav-header .brand { + color: #ccc; + } + + .nav { + .slide { + .slide-menu { + .active { + a { + color: #cccccc; + + &::after { + background-color: #cccccc !important; + } + } + } + + li { + a { + color: #cccccc; + } + + a:hover { + background: none !important; + } + } + } + + .menu.active { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + color: #cccccc !important; + + a::after { + background-color: #cccccc !important; + } + } + } + + li { + a { + color: #cccccc !important; + } + + a:hover { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + color: #cccccc !important; + } + } + } + + + &::-webkit-scrollbar-thumb { + background-color: #252526 !important; + } + + &::-webkit-scrollbar-track { + background-color: #333; + } + } + + .main-right { + background-color: #1e1e1e; + } +} + +h2 { + color: #ccc; + background: #333333; +} + +h3 { + color: #ccc; + border-bottom: 0; + background: #333333; +} + +a:-webkit-any-link { + color: -webkit-link; + cursor: pointer; + color: #483d8b; + color: var(--dark-primary); +} + + +input:-webkit-autofill { + background-color: #3c3c3c !important; +} + +.cbi-value-field .cbi-input-apply, +.cbi-button-apply, +.cbi-button-edit { + color: #fff !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; +} + + +.cbi-section em { + color: #ccc; +} + +header.bg-primary { + background-color: #1e1e1e !important; +} + +.cbi-map-descr { + color: #ccc; +} + +.cbi-section { + background: none; + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35) +} + +.panel-title { + color: #ccc; + background-color: #333333; + border-bottom: 0px; +} + +div>table>tbody>tr:nth-of-type(2n), +div>.table>.tr:nth-of-type(2n) { + background-color: #252526; +} + +table>tbody>tr>td, +table>tfoot>tr>td, +table>thead>tr>td { + color: #ccc; +} + +fieldset>table>tbody>tr:nth-of-type(2n) { + background-color: #252526; +} + +table>tbody>tr>td, +table>tfoot>tr>td, +table>thead>tr>td { + border-top: 1px solid #252526; +} + +#swaptotal>div>div, +#swapfree>div>div, +#memfree>div>div, +#membuff>div>div, +#conns>div>div, +#memtotal>div>div { + background-color: #32325d !important; +} + +#swaptotal>div>div>div>small, +#swapfree>div>div>div>small, +#memfree>div>div>div>small, +#membuff>div>div>div>small, +#conns>div>div>div>small, +#memtotal>div>div>div>small { + + color: #ccc !important; +} + +.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last { + line-height: 1.8em; + + div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] { + border: 1px solid #999999 !important; + background-color: transparent !important; + + div { + background-color: #32325d !important; + } + } + +} + +table>tbody>tr>th, +table>tfoot>tr>th, +table>thead>tr>th { + + background-color: #252526; + border-bottom: black 1px solid !important; +} + +tr>td, +tr>th, +.tr>.td, +.tr>.th, +.cbi-section-table-row::before, +#cbi-wireless>#wifi_assoclist_table>.tr:nth-child(2) { + border-top: 0; +} + +.cbi-rowstyle-2 { + background-color: #1e1e1e; +} + +.cbi-rowstyle-1 { + background-color: #252526; +} + +.cbi-rowstyle-2 .cbi-button-up, +.cbi-rowstyle-2 .cbi-button-down, +body:not(.Interfaces) .cbi-rowstyle-2:first-child { + background-color: rgb(102, 102, 102) !important; +} + +.cbi-section>h3:first-child, +.panel-title, +h3 { + color: #ccc; + border-bottom: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +h4 { + background-color: #1e1e1f; +} + +.cbi-progressbar { + position: relative; + min-width: 170px; + height: 20px; + margin: 6px 0; + border: thin solid #999; + background: transparent; + border-radius: 0.2rem; + overflow: hidden; + + div { + background-color: #32325d !important; + } +} + +.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + background-color: #1e1e1f; +} + +.cbi-button { + color: #ccc !important; + background-color: #483d8b; + background-color: var(--dark-primary); +} + +.cbi-section-node { + background: none; + border-radius: 0 0 .375rem .375rem; + padding: 0rem; +} + +abbr { + color: #5e72e4; +} + +div>table>tbody>tr:nth-of-type(2n), +div>.table>.tbody>.tr:nth-of-type(2n) { + background-color: #252526; +} + +#content_syslog { + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35) +} + +#syslog { + color: #ccc; + background-color: #1e1e1e; +} + +#iwsvg, +#iwsvg2, +#bwsvg { + overflow: hidden; + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); + background-color: #1e1e1e !important; +} + +.tabs { + background-color: #252526; +} + +.tabs>li[class~="active"]>a { + color: #ccc; +} + +.tabs>li[class~="active"], +.tabs>li:hover { + border-bottom: 0.18751rem solid #483d8b; + border-bottom: 0.18751rem solid var(--dark-primary); + color: #ccc; + background-color: #181819; +} + +.cbi-tabmenu>li>a, +.tabs>li>a { + color: #ccc; + + &:hover { + color: #ccc; + } +} + +.cbi-tabmenu>li { + background: #2d2d2d; +} + +.cbi-tabmenu li[class~="cbi-tab"] a { + color: #ccc; +} + +.cbi-tabmenu>li:hover { + color: #ccc; + background: #2d2d2d; +} + +.cbi-tabmenu>li[class~="cbi-tab"] { + background-color: #181819; +} + +.cbi-tabcontainer>.cbi-value:nth-of-type(2n) { + background-color: #252526; +} + +.cbi-value-title { + color: #ccc; +} + +select, +input { + color: #ccc; + background-color: transparent !important; + border: 1px solid #252526; + box-shadow: none; +} + +select:not([multiple="multiple"]):focus, +input:focus { + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; + outline: 0; + +} + +select { + background-color: #1e1e1e !important; +} + +#cbi-dropbear h2, +#cbi-dropbear .cbi-map-descr, +#cbi-dropbear .cbi-map-descr abbr, +#cbi-rc h2, +#cbi-rc .cbi-map-descr, +#cbi-distfeedconf h2, +#cbi-distfeedconf .cbi-map-descr, +#cbi-customfeedconf h2, +#cbi-customfeedconf .cbi-map-descr, +#cbi-download h2, +#cbi-filelist h2 { + color: #ccc !important; +} + +.cbi-value-field>ul>li .ifacebadge { + background-color: #3c3c3c; +} + +.cbi-section-descr { + color: #ccc; +} + +.cbi-input-textarea { + background-color: #1e1e1e; + color: #ccc; +} + + + +.cbi-section-remove:nth-of-type(2n), +.cbi-section-node:nth-of-type(2n) { + background-color: #1e1e1e; +} + +.node-system-packages>.main table tr td:nth-last-child(1) { + color: #ccc; + +} + +.cbi-section-node .cbi-value { + padding: 1rem 1rem 0.3rem 1rem; +} + +.ifacebox { + background-color: none; + border: 1px solid #1e1e1e; +} + +.ifacebox-head { + color: #666; +} + +.ifacebox-body { + background-color: #333; +} + +.zonebadge strong { + color: #333; +} + +.zonebadge>.ifacebadge { + background-color: #3c3c3c; +} + +div.cbi-value var, +td.cbi-value-field var { + color: #5e72e4; +} + +#diag-rc-output>pre { + color: #ccc; + background-color: #1e1e1e; +} + +.node-services-vssr .block { + background-color: #3c3c3c !important; + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); +} + +.node-services-vssr .block h4 { + color: #ccc !important; +} + +.node-services-vssr .status-bar { + color: #ccc; + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); + background-color: #1e1e1e; +} + +.node-services-vssr .cbi-section-table-row { + color: #ccc; + background-color: #3c3c3c !important; + box-shadow: 0 0 5px 0 rgba(0, 0, 0, .35) +} + +.node-services-vssr .cbi-section-table-row.fast { + background: #483d8b !important; + background: var(--dark-primary) !important; + color: #fff; +} + +.node-services-vssr .ssr-button { + color: #ccc; + +} + +.node-services-vssr .incon:nth-child(2) { + border-right: #1e1e1e 1px solid; +} + +#xhr_poll_status>.label.success { + color: #ccc !important; + + background-color: darkolivegreen !important; +} + +.notice { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; +} + +.cbi-input-find, +.cbi-input-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-find, +.cbi-input-reload, +.cbi-button-reload { + color: #fff !important; + background: darkolivegreen !important; + border-color: darkolivegreen !important; +} + +.cbi-button-reset, +.cbi-input-remove { + color: #fff !important; + background-color: darkorange !important; + border-color: darkorange !important; +} + +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit, +.cbi-button-edit.important, +.cbi-button-apply.important, +.cbi-button-reload.important, +.cbi-button-action.important { + border: 1px #483d8b solid !important; + border: 1px var(--dark-primary) solid !important; +} + +.btn[value="Dismiss"], +.cbi-button[value="Terminate"], +.cbi-button[value="Reset"], +.cbi-button[value="Disabled"], +.cbi-button[onclick^="iface_reconnect"], +.cbi-button[onclick="handleReset(event)"], +.cbi-button-neutral[value="Disable"] { + font-weight: normal; + color: #fff; + border: thin solid darkorange !important; + background-color: darkorange !important; +} + +fieldset[id^="cbi-apply-"] { + background-color: #333333; +} + +#detail-bubble>div { + border: 1px solid #ccc; + border-radius: 2px; + padding: 5px; + background: #252525; +} + +.ifacebox-head.active { + background-color: #32325d !important; +} + +header .fill .status span[data-style="active"] { + color: #ccc !important; + background-color: darkolivegreen !important; +} + +#cbi-wireless .td, +#cbi-network .tr:first-child>.td, +.table[width="100%"]>.tr:first-child>.td, +[data-page="admin-network-diagnostics"] .tr>.td, +.tr.table-titles>.th, +.tr.cbi-section-table-titles>.th { + background-color: #252526; + border-bottom: black 1px solid !important; + +} + +.network-status-table .ifacebox-body .ifacebadge { + background-color: #252526; + border-bottom: 0; + box-shadow: none; +} + +td>.ifacebadge, +.td>.ifacebadge { + + background-color: #483d8b; + background-color: var(--dark-primary); + border: 0; +} + +.btn.danger, +.cbi-section-remove>.cbi-button, +.cbi-button-remove, +.cbi-button-reset, +.cbi-button-negative, +.cbi-button[value="Stop"], +.cbi-button[value="Kill"], +.cbi-button[onclick="reboot(this)"], +.cbi-button-neutral[value="Restart"] { + border: thin solid darkorange !important; + background-color: darkorange !important; +} + +.cbi-section, +.cbi-section-error, +#iptables, +.Firewall form, +#cbi-network>.cbi-section-node, +#cbi-wireless>.cbi-section-node, +#cbi-wireless>#wifi_assoclist_table, +[data-tab-title], +[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear), +[data-page="admin-system-opkg"] #maincontent>.container { + background: #1e1e1e !important; + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.35); +} + +div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { + background: transparent !important; +} + +[data-page="admin-system-admin"] .cbi-map h2, +[data-page="admin-system-admin-password"] .cbi-map h2, +[data-page="admin-system-admin"] .cbi-map .cbi-map-descr, +[data-page="admin-system-admin-password"] .cbi-map .cbi-map-descr { + color: #ccc; +} + +[data-page="admin-system-flash"] { + .modal { + label>input[type="checkbox"] { + top: -0.35rem; + } + + .btn { + white-space: normal !important; + background-color: darkseagreen; + } + + .alert-message { + background-color: transparent !important; + } + + .danger { + border: thin solid darkorange !important; + background-color: darkorange !important; + } + } +} + +.cbi-value input[type="password"]+.cbi-button-neutral { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; +} + +.btn, +button, +select, +input, +.cbi-dropdown { + border: 1px solid #3c3c3c !important; +} + + +.cbi-dropdown .preview { + color: #ccc; +} + +.cbi-section-table-row { + background-color: #1e1e1e !important; +} + +.modal { + background-color: #1e1e1e; +} + +.cbi-button-positive { + color: #fff !important; + background-color: darkolivegreen !important; +} + +[data-page="admin-system-flash"] legend { + color: #ccc; +} + +.logout:before { + color: #adb5bd !important; +} + +.cbi-dropdown[open] { + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; +} + +.cbi-dropdown[open]>ul.dropdown { + background: #252526 !important; + color: #ccc !important; + box-shadow: none; + border: 1px solid #3c3c3c !important; + + +} + +.cbi-dropdown[open]>ul.dropdown li { + color: #ccc; + border-bottom: 1px solid #3c3c3c !important; +} + +.cbi-dropdown[open]>ul.dropdown>li[selected] { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + border-bottom: 1px solid #3c3c3c !important; +} + +.cbi-dropdown[open]>ul.dropdown>li.focus { + background: #483d8b; + background: var(--dark-primary); + outline: none; +} + +.ifacebadge { + background-color: #333333; +} + +.cbi-dynlist>.item>span { + border: 1px solid #3c3c3c !important; +} + +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit, +.cbi-button-edit, +.cbi-button-apply, +.cbi-button-reload, +.cbi-button-action, +.cbi-button[value="Submit"], +.cbi-button[value="Upload"], +.cbi-button[value$="Apply"], +.cbi-button[onclick="addKey(event)"] { + background: #483d8b !important; + background: var(--dark-primary) !important; +} + +.btn.primary, +.cbi-page-actions .cbi-button-save, +.cbi-page-actions .cbi-button-apply+.cbi-button-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-positive, +.cbi-button-link, +.cbi-button[value="Enable"], +.cbi-button[value="Scan"], +.cbi-button[value^="Back"], +.cbi-button-neutral[onclick="handleConfig(event)"] { + background: #483d8b; + background: var(--dark-primary); +} + +[data-page="admin-system-opkg"] h2 { + color: #ccc !important; +} + + + + +@media screen and (max-width: 480px) { + .node-status-iptables>.main div>.cbi-map>form { + background-color: #1e1e1e; + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); + } + + +} diff --git a/luci-theme-argon/htdocs/luci-static/argon/less/fonts.less b/luci-theme-argon/htdocs/luci-static/argon/less/fonts.less new file mode 100755 index 000000000..71dd0fed7 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/less/fonts.less @@ -0,0 +1,190 @@ +// out: false +/** + * Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material and Argon Template + * + * luci-theme-argon + * Copyright 2020 Jerryk + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/jerrykuku/luci-theme-argon/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth + * Copyright 2008 Jo-Philipp Wich + * Copyright 2012 David Menting + * + * MUI: + * https://github.com/muicss/mui + * + * luci-theme-material: + * https://github.com/LuttyYang/luci-theme-material/ + * + * Agron Theme + * https://demos.creative-tim.com/argon-dashboard/index.html + * + * Login background + * https://unsplash.com/ + * + * Licensed to the public under the Apache License 2.0 + */ + + + @font-face { + font-family: 'Google Sans'; + src: url('data:application/font-woff2;charset=utf-8;base64,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') format('woff2'), + url('data:application/font-woff;charset=utf-8;base64,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') format('woff'); + font-weight: normal; + font-style: normal; +} + +/* Logo Font */ +@font-face { + font-family: 'TypoGraphica'; + src: url('../fonts/TypoGraphica.eot?#iefix') format('embedded-opentype'), + url('../fonts/TypoGraphica.woff') format('woff'), + url('../fonts/TypoGraphica.ttf') format('truetype'), + url('../fonts/TypoGraphica.svg#TypoGraphica') format('svg'); + font-weight: normal; + font-style: normal; +} + +/* ICON Font */ + +@font-face { + font-family: 'argon'; + src: url('../fonts/argon.eot?u6kthm'); + src: url('../fonts/argon.eot?u6kthm#iefix') format('embedded-opentype'), + url('../fonts/argon.ttf?u6kthm') format('truetype'), + url('../fonts/argon.woff?u6kthm') format('woff'), + url('../fonts/argon.svg?u6kthm#argon') format('svg'); + font-weight: normal; + font-style: normal; + font-display: block; +} + +[class^="icon-"], +[class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-expand_more:before { + content: "\e20b"; +} + +.icon-menu:before { + content: "\e20e"; +} + +.icon-favorite:before { + content: "\e291"; +} + +.icon-spinner:before { + content: "\e603"; +} + +.icon-delete:before { + content: "\e900"; +} + +.icon-edit:before { + content: "\e901"; +} + +.icon-use:before { + content: "\e902"; +} + +.icon-loading:before { + content: "\e903"; +} + +.icon-switch:before { + content: "\e904"; +} + +.icon-error:before { + content: "\e905"; +} + +.icon-dashboard:before { + content: "\e906"; +} + +.icon-logout:before { + content: "\e907"; +} + +.icon-Network:before { + content: "\e908"; +} + +.icon-services:before { + content: "\e909"; +} + +.icon-system:before { + content: "\e90a"; +} + +.icon-vpn:before { + content: "\e90b"; +} + +.icon-storage:before { + content: "\e90c"; +} + +.icon-statistics:before { + content: "\e90d"; +} + +.icon-hello-world:before { + content: "\e90e"; +} + +.icon-angle-right:before { + content: "\e90f"; +} + +.icon-password:before { + content: "\e910"; +} + +.icon-user:before { + content: "\e971"; +} + +.icon-question:before { + content: "\f059"; +} + +.icon-docker:before { + content: "\e911"; +} + +.icon-control:before { + content: "\e912"; +} + +.icon-statistics1:before { + content: "\e913"; +} + +.icon-asterisk:before { + content: "\e914"; +} + +.icon-app:before { + content: "\e915"; +} \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/less/pure-min.less b/luci-theme-argon/htdocs/luci-static/argon/less/pure-min.less new file mode 100755 index 000000000..040c34a1f --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/less/pure-min.less @@ -0,0 +1,12 @@ +// out: false +/*! +Pure v2.0.3 +Copyright 2013 Yahoo! +Licensed under the BSD License. +https://github.com/pure-css/pure/blob/master/LICENSE.md +*/ +/*! +normalize.css v | MIT License | git.io/normalize +Copyright (c) Nicolas Gallagher and Jonathan Neal +*/ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html{font-family:sans-serif}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto}.pure-g{letter-spacing:-.31em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-line-pack:start;align-content:flex-start}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){table .pure-g{display:block}}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class*=pure-u]{font-family:sans-serif}.pure-u-1,.pure-u-1-1,.pure-u-1-12,.pure-u-1-2,.pure-u-1-24,.pure-u-1-3,.pure-u-1-4,.pure-u-1-5,.pure-u-1-6,.pure-u-1-8,.pure-u-10-24,.pure-u-11-12,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-2-24,.pure-u-2-3,.pure-u-2-5,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24,.pure-u-3-24,.pure-u-3-4,.pure-u-3-5,.pure-u-3-8,.pure-u-4-24,.pure-u-4-5,.pure-u-5-12,.pure-u-5-24,.pure-u-5-5,.pure-u-5-6,.pure-u-5-8,.pure-u-6-24,.pure-u-7-12,.pure-u-7-24,.pure-u-7-8,.pure-u-8-24,.pure-u-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%}.pure-u-1-12,.pure-u-2-24{width:8.3333%}.pure-u-1-8,.pure-u-3-24{width:12.5%}.pure-u-1-6,.pure-u-4-24{width:16.6667%}.pure-u-1-5{width:20%}.pure-u-5-24{width:20.8333%}.pure-u-1-4,.pure-u-6-24{width:25%}.pure-u-7-24{width:29.1667%}.pure-u-1-3,.pure-u-8-24{width:33.3333%}.pure-u-3-8,.pure-u-9-24{width:37.5%}.pure-u-2-5{width:40%}.pure-u-10-24,.pure-u-5-12{width:41.6667%}.pure-u-11-24{width:45.8333%}.pure-u-1-2,.pure-u-12-24{width:50%}.pure-u-13-24{width:54.1667%}.pure-u-14-24,.pure-u-7-12{width:58.3333%}.pure-u-3-5{width:60%}.pure-u-15-24,.pure-u-5-8{width:62.5%}.pure-u-16-24,.pure-u-2-3{width:66.6667%}.pure-u-17-24{width:70.8333%}.pure-u-18-24,.pure-u-3-4{width:75%}.pure-u-19-24{width:79.1667%}.pure-u-4-5{width:80%}.pure-u-20-24,.pure-u-5-6{width:83.3333%}.pure-u-21-24,.pure-u-7-8{width:87.5%}.pure-u-11-12,.pure-u-22-24{width:91.6667%}.pure-u-23-24{width:95.8333%}.pure-u-1,.pure-u-1-1,.pure-u-24-24,.pure-u-5-5{width:100%}.pure-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-group{letter-spacing:-.31em;text-rendering:optimizespeed}.opera-only :-o-prefocus,.pure-button-group{word-spacing:-.43em}.pure-button-group .pure-button{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-button{font-family:inherit;font-size:100%;padding:.5em 1em;color:rgba(0,0,0,.8);border:none transparent;background-color:#e6e6e6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:focus,.pure-button:hover{background-image:-webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;border-color:#000}.pure-button-disabled,.pure-button-disabled:active,.pure-button-disabled:focus,.pure-button-disabled:hover,.pure-button[disabled]{border:none;background-image:none;opacity:.4;cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none;pointer-events:none}.pure-button-hidden{display:none}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-button-group .pure-button{margin:0;border-radius:0;border-right:1px solid rgba(0,0,0,.2)}.pure-button-group .pure-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.pure-button-group .pure-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right:none}.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=color]{padding:.2em .5em}.pure-form input[type=color]:focus,.pure-form input[type=date]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=email]:focus,.pure-form input[type=month]:focus,.pure-form input[type=number]:focus,.pure-form input[type=password]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=text]:focus,.pure-form input[type=time]:focus,.pure-form input[type=url]:focus,.pure-form input[type=week]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;border-color:#129fea}.pure-form input:not([type]):focus{outline:0;border-color:#129fea}.pure-form input[type=checkbox]:focus,.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus{outline:thin solid #129fea;outline:1px auto #129fea}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=color][disabled],.pure-form input[type=date][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=email][disabled],.pure-form input[type=month][disabled],.pure-form input[type=number][disabled],.pure-form input[type=password][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=text][disabled],.pure-form input[type=time][disabled],.pure-form input[type=url][disabled],.pure-form input[type=week][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input:not([type])[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background-color:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form select:focus:invalid,.pure-form textarea:focus:invalid{color:#b94a48;border-color:#e9322d}.pure-form input[type=checkbox]:focus:invalid:focus,.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{height:2.25em;border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=color],.pure-form-stacked input[type=date],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=email],.pure-form-stacked input[type=file],.pure-form-stacked input[type=month],.pure-form-stacked input[type=number],.pure-form-stacked input[type=password],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=text],.pure-form-stacked input[type=time],.pure-form-stacked input[type=url],.pure-form-stacked input[type=week],.pure-form-stacked label,.pure-form-stacked select,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-stacked input:not([type]){display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned select,.pure-form-aligned textarea,.pure-form-message-inline{display:inline-block;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 11em}.pure-form .pure-input-rounded,.pure-form input.pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input,.pure-form .pure-group textarea{display:block;padding:10px;margin:0 0 -1px;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus,.pure-form .pure-group textarea:focus{z-index:3}.pure-form .pure-group input:first-child,.pure-form .pure-group textarea:first-child{top:1px;border-radius:4px 4px 0 0;margin:0}.pure-form .pure-group input:first-child:last-child,.pure-form .pure-group textarea:first-child:last-child{top:1px;border-radius:4px;margin:0}.pure-form .pure-group input:last-child,.pure-form .pure-group textarea:last-child{top:-2px;border-radius:0 0 4px 4px;margin:0}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-3-4{width:75%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=color],.pure-group input[type=date],.pure-group input[type=datetime-local],.pure-group input[type=datetime],.pure-group input[type=email],.pure-group input[type=month],.pure-group input[type=number],.pure-group input[type=password],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=text],.pure-group input[type=time],.pure-group input[type=url],.pure-group input[type=week]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0 0}.pure-form-message,.pure-form-message-inline{display:block;font-size:.75em;padding:.2em 0 .8em}}.pure-menu{-webkit-box-sizing:border-box;box-sizing:border-box}.pure-menu-fixed{position:fixed;left:0;top:0;z-index:3}.pure-menu-item,.pure-menu-list{position:relative}.pure-menu-list{list-style:none;margin:0;padding:0}.pure-menu-item{padding:0;margin:0;height:100%}.pure-menu-heading,.pure-menu-link{display:block;text-decoration:none;white-space:nowrap}.pure-menu-horizontal{width:100%;white-space:nowrap}.pure-menu-horizontal .pure-menu-list{display:inline-block}.pure-menu-horizontal .pure-menu-heading,.pure-menu-horizontal .pure-menu-item,.pure-menu-horizontal .pure-menu-separator{display:inline-block;vertical-align:middle}.pure-menu-item .pure-menu-item{display:block}.pure-menu-children{display:none;position:absolute;left:100%;top:0;margin:0;padding:0;z-index:3}.pure-menu-horizontal .pure-menu-children{left:0;top:auto;width:inherit}.pure-menu-active>.pure-menu-children,.pure-menu-allow-hover:hover>.pure-menu-children{display:block;position:absolute}.pure-menu-has-children>.pure-menu-link:after{padding-left:.5em;content:"\25B8";font-size:small}.pure-menu-horizontal .pure-menu-has-children>.pure-menu-link:after{content:"\25BE"}.pure-menu-scrollable{overflow-y:scroll;overflow-x:hidden}.pure-menu-scrollable .pure-menu-list{display:block}.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list{display:inline-block}.pure-menu-horizontal.pure-menu-scrollable{white-space:nowrap;overflow-y:hidden;overflow-x:auto;padding:.5em 0}.pure-menu-horizontal .pure-menu-children .pure-menu-separator,.pure-menu-separator{background-color:#ccc;height:1px;margin:.3em 0}.pure-menu-horizontal .pure-menu-separator{width:1px;height:1.3em;margin:0 .3em}.pure-menu-horizontal .pure-menu-children .pure-menu-separator{display:block;width:auto}.pure-menu-heading{text-transform:uppercase;color:#565d64}.pure-menu-link{color:#777}.pure-menu-children{background-color:#fff}.pure-menu-disabled,.pure-menu-heading,.pure-menu-link{padding:.5em 1em}.pure-menu-disabled{opacity:.5}.pure-menu-disabled .pure-menu-link:hover{background-color:transparent}.pure-menu-active>.pure-menu-link,.pure-menu-link:focus,.pure-menu-link:hover{background-color:#eee}.pure-menu-selected>.pure-menu-link,.pure-menu-selected>.pure-menu-link:visited{color:#000}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0} diff --git a/luci-theme-argon/htdocs/luci-static/resources/menu-argon.js b/luci-theme-argon/htdocs/luci-static/resources/menu-argon.js new file mode 100755 index 000000000..cc8678f17 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/resources/menu-argon.js @@ -0,0 +1,158 @@ +'use strict'; +'require baseclass'; +'require ui'; + +return baseclass.extend({ + __init__: function () { + ui.menu.load().then(L.bind(this.render, this)); + }, + + render: function (tree) { + var node = tree, + url = '', + children = ui.menu.getChildren(tree); + + for (var i = 0; i < children.length; i++) { + var isActive = (L.env.requestpath.length ? children[i].name == L.env.requestpath[0] : i == 0); + + if (isActive) + this.renderMainMenu(children[i], children[i].name); + } + + if (L.env.dispatchpath.length >= 3) { + for (var i = 0; i < 3 && node; i++) { + node = node.children[L.env.dispatchpath[i]]; + url = url + (url ? '/' : '') + L.env.dispatchpath[i]; + } + + if (node) + this.renderTabMenu(node, url); + } + + document.querySelector('a.showSide') + .addEventListener('click', ui.createHandlerFn(this, 'handleSidebarToggle')); + document.querySelector('.darkMask') + .addEventListener('click', ui.createHandlerFn(this, 'handleSidebarToggle')); + }, + + handleMenuExpand: function (ev) { + var a = ev.target, slide = a.parentNode, slide_menu = a.nextElementSibling; + var collapse = false; + + document.querySelectorAll('.main .main-left .nav > li >ul.active').forEach(function (ul) { + $(ul).stop(true).slideUp("fast", function () { + ul.classList.remove('active'); + ul.previousElementSibling.classList.remove('active'); + }); + if (!collapse && ul === slide_menu) { + collapse = true; + } + + }); + + if (!slide_menu) + return; + + + if (!collapse) { + $(slide).find(".slide-menu").slideDown("fast",function(){ + slide_menu.classList.add('active'); + a.classList.add('active'); + }); + a.blur(); + } + ev.preventDefault(); + ev.stopPropagation(); + }, + + renderMainMenu: function (tree, url, level) { + var l = (level || 0) + 1, + ul = E('ul', { 'class': level ? 'slide-menu' : 'nav' }), + children = ui.menu.getChildren(tree); + + if (children.length == 0 || l > 2) + return E([]); + + for (var i = 0; i < children.length; i++) { + var isActive = ((L.env.dispatchpath[l] == children[i].name) && (L.env.dispatchpath[l - 1] == tree.name)), + submenu = this.renderMainMenu(children[i], url + '/' + children[i].name, l), + hasChildren = submenu.children.length, + slideClass = hasChildren ? 'slide' : null, + menuClass = hasChildren ? 'menu' : null; + if (isActive) { + ul.classList.add('active'); + slideClass += " active"; + menuClass += " active"; + } + + ul.appendChild(E('li', { 'class': slideClass }, [ + E('a', { + 'href': L.url(url, children[i].name), + 'click': (l == 1) ? ui.createHandlerFn(this, 'handleMenuExpand') : null, + 'class': menuClass, + 'data-title': hasChildren ? children[i].title.replace(" ", "_") : children[i].title.replace(" ", "_"), + }, [_(children[i].title)]), + submenu + ])); + } + + if (l == 1) { + document.querySelector('#mainmenu').appendChild(ul); + document.querySelector('#mainmenu').style.display = ''; + + } + return ul; + }, + + renderTabMenu: function (tree, url, level) { + var container = document.querySelector('#tabmenu'), + l = (level || 0) + 1, + ul = E('ul', { 'class': 'tabs' }), + children = ui.menu.getChildren(tree), + activeNode = null; + + if (children.length == 0) + return E([]); + + for (var i = 0; i < children.length; i++) { + var isActive = (L.env.dispatchpath[l + 2] == children[i].name), + activeClass = isActive ? ' active' : '', + className = 'tabmenu-item-%s %s'.format(children[i].name, activeClass); + + ul.appendChild(E('li', { 'class': className }, [ + E('a', { 'href': L.url(url, children[i].name) }, [_(children[i].title)]) + ])); + + if (isActive) + activeNode = children[i]; + } + + container.appendChild(ul); + container.style.display = ''; + + if (activeNode) + container.appendChild(this.renderTabMenu(activeNode, url + '/' + activeNode.name, l)); + + return ul; + }, + + handleSidebarToggle: function (ev) { + var showside = document.querySelector('a.showSide'), + sidebar = document.querySelector('#mainmenu'), + darkmask = document.querySelector('.darkMask'), + scrollbar = document.querySelector('.main-right'); + + if (showside.classList.contains('active')) { + showside.classList.remove('active'); + sidebar.classList.remove('active'); + scrollbar.classList.remove('active'); + darkmask.classList.remove('active'); + } + else { + showside.classList.add('active'); + sidebar.classList.add('active'); + scrollbar.classList.add('active'); + darkmask.classList.add('active'); + } + } +}); diff --git a/luci-theme-argon/luasrc/view/themes/argon/footer.htm b/luci-theme-argon/luasrc/view/themes/argon/footer.htm new file mode 100755 index 000000000..085f6e76f --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/footer.htm @@ -0,0 +1,46 @@ +<%# + Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material Argon Template + + luci-theme-argon + Copyright 2020 Jerrykuku + + Have a bug? Please create an issue here on GitHub! + https://github.com/jerrykuku/luci-theme-argon/issues + + luci-theme-material: + Copyright 2015 Lutty Yang + + Agron Theme + https://demos.creative-tim.com/argon-dashboard/index.html + + Licensed to the public under the Apache License 2.0 +-%> + +<% local ver = require "luci.version" %> +

31!%y8!ZmGpr?S?i@M!cgDFr>9?$*ZfK`T{WqBXX81>@z^H~~Fqwa$+K%L9 zvhEDz{I_Ev@$C3P7;p9M^!*19&gF)mTE|9&OcaOS=Z0}y{U;;kklf0{LFM+0)@%+0 z3o*gGj1dl{z8R$|s~QS=Sv3meywt!E0f#4xTkJpDE49-j4o zT4>VYRD^AU!z6@cvVNji*Mk2bGGh%1^aBn_r96=c{##;**Vhsa{#ezFwb7L@jej6k z0$tJ`G9B-Xc=#ok5J(%F7yXgp`u~O%VL0NLz-@Jb+`4T#NZOBIg8Bho3x1Ph~zRkin=t9ZnmSLxd;&QNp>^<`@}Y-*7PIb8VRs|34aHbx8Yu zeJfLSdAQ;41uc7Db%HJ zXG;~TPyr%C!$@ze?PS}o{v9O@X!uX=M&McSx)KTR$DczWAFlLck(#{N+v~1AB2`+M zCo~y?#`Gw>*7##DXM7IDdKdm$ob=>2OIc*IuPz3CT&fsh;q1bU|8c2z8brGN^Kvud zEi~_5Jn81i{E-{kYfbG@D%-Li)p+%5&4R(7fOK0|Jv?a3Kz?ME?LFdchgLCex}rOFt6%h8$><8a}6mG@++(RUT3{SQ9r(h#5RLK$9ka>GyTQ5<*qyv|7@bY$} zz~4?AEoM>~3SklpN^SkuPKZ%;x4&(qwg zhftkDD;W8H7J;hKM_WF*LZ*)eV)^v;)yTPXM_823@PXe`o(=|A^Sjqko(MJG?49S% znoG%AOq~6EtgkmECpN(01pegQl`kG_gd}S#c*DU5f23bRxFpWUV-E?c3Ec<_?-0k7 zBbtY(nDvX9&7c*#&KMS%P|YiK_P#(+-ZiH@xT`!Ge4OvSdyF0ExUvH=;4-rJfyl@N zBF3Ychv~h}LiiS4NWeNV-aBKl(Gf1)>yv9g5<$4GZlkHz18Y^o=#ka<2R%7&JE0{e z6?VTTdES7JKv$wO;*KD-WhXYip`u?JrV_&hfaCUHPz!(M6{hv6AR zsW$|0>x3G-=1el$9N`C7Dqln?v#jRX8l1_?zAB4DMe zhLY7hz=oa+MDN#~?(SD!RGqAS`OAvu)fY(Y&~w+V^(zl=4IRsW$C&Udbe-^593!U| z2L$%mqh-7Kb6TsfKfaeFak_v5osJk_lbJ;dXq`Ez6~yhyb)DgpM2`)*(53FolBA+#!X zexHuUN(!&?3-NT+1mjtr{9gpG{NA8EO6>=CmeWL8x49pqDFc|2-x(P>mmNojXf+$} zd2kbqtU|cC5<;Zq&g!vqkX!;8?5serC`fT>eSW1I!xHKDCIgG$?+&uy%Eg8PcF103 zu!MNSE-7`5sern^Hz1zmflFa(+J%oXvyvOHz4)CY@ zvLefy%q7j7@uwhcof}E zt~L+tyj*)8cu?n~ZiF%+S{rK2LPJB^@$ zKkw>Eza+u!U41^=uV48HQ5NG8JoVY5w$IW45iQEK zl%`$8a9Vkhs&{}{Y?E_^S^H6k7>CFKY;T0873k$_91V06d8*&+Z_>*3hTB5^od=G) zurAXmy9J`-0BT6l9dGvzX%SN2noXcVS_t$4l>-+?CoGcQn&BrCh}9c%>9}6cpH?>v zq^Tkx#h!)&mty!e)vy^OjzPIhYAKj>k6F4ew=E8~mASQIZ;plwk=F--I~_0a&Mm40 z{m5$?!(1LLPhYzOCA^75u{5x3hX1GLc5*pdBJy}@!f@JQv2P`=PVL?_l+w2K+a7lxi!Y4`FO3x#hNebBBCJrORs7av@vF0E&7TL%@t z6MPsuG-soN`?^h7lLybtS_L7gf0JXPIWvF7(^47nQ;)r0H*BBDB?vUR5A@+X7Mu%h zJ22CFmv@@Dqcf#~tRzcSvJ~O%1J%FyFRUT{W*!~Hk_A=xGvPo10@T$jEN&!kE3{Yy zzuHtj7{7DZF4#6whq(kLioFbmE+3vv_O)y3mNl_^z?Q$4OyAR6!N?Ac^@-h=nEq4x zER7wfq5(m9kVNg7ESgxiYJV7ix5!Q?Lj&laYi6Nxe`xA<8*=#?=gh{fxJNm;*gI(# zGuDqPsz*+3`WXO?jU4SfXa`bCH`KrERpF~&1!;!OJgx}nc*2jtktg`%j1o}?f|#0}-5XJR+zIyo5By#<3@ z7HF07BXhW~hy!7iE?TuA3p3?w61UtCwQbyuZ4|sQ6O&Wp*aK>ln9lq)Rf8}-FAXMm zXVPDmAd1lB-*vv*0q5e=?Std>;_SROnBOZrEntrkMaRo>^=OLQf(&@jX{zyK1YFj` z)fyz_dx_5-TrwDxHty;;hl$L=7t;zlkiJgsDaw=}nXq%T$j5|yS5go4qR`!T&b+|+~DAyM7?);zqzj&bKd2-x(OUsPM_R$BTk%hL~( zaSn0W)2Od{^o?zS_x!H8$NUlppI)2NT|ziMzedf+hG95>t$mwF?LtrH^<5bgwB z)oPAh26htan=}da%o!(;egRTOSZ2tqoN2GKAZ|krXjz~-9@wcUz*8dB4V$c?Y4=>q z-zy^PsHNUYzB8&c->h321fcY2m{zOttZsn0f*9c>Pl>UMynLw0eDuz_#x(V=%|2k( z|MEz`RS;VVq1uLj!N`Qf`}kuKmN?3gQHPiA6m({xvgJU6!L!?#wTEe$8=Kf;6G6KW zj6<-w3rhP&*(2IjTDnIiJvl<~V9Fu=sJkQK2oEXpOc~C!opPRn8!`_$U&PTEM^vde z!fNYWalb0mw1Vi{VP?0ouIn(PaNF*o|AbN-^BBMK5&pm}4R?#;SC$Y&tNYK;mB{1= zs-Y2trlqhcTZ>~iTN@HuuJOWyE`S!ws)F&Q?S;cnh(f+r&1?X3Jcd;!vm-$jU6H;H z^iu(Ljr@mSUziwC0)s8_ibD!9+yII{i=(_DlzsRI^>aJB$V%v~yzz}KyPU6z+~7_V zoV8k?-(tF5`om2=@2z zXjMd~Cj*3!>=x`q*@QE4SY!QxRPLPn29?_8wRSKb0fX-Y4?ow@{MtY zT)JS+xV(g2O!Y-*SqS7_QqsnW?_V$W3{+r8fvC@+-_b)EH@=mHn^p zKafCF^6Lq64Y{ItiGH4{J(sV1s$ujksw{njC)>-c#@~4!9Pg`I3*}mFP_`+J}vIqM2xasPpcLqwTTIC_Iw}a z@k0P(Pr3;7G=MLkp%dh=E4QcOCE0i)2DUN9(xWThs03((_juTJ3196&m?uqTqH$m! zM5@Z~=0+3kUj{J_1FsBuEhm_vv<>Y>l9abGL#ph7#O)K`@5XFa3R@%UVzd zG(N?rf?s_%CjiTt)yIiPf_nyJU@b|)c9Z#Sh$@!I81+Ol2?9BV!5_Nk0`C42yI*5~ zBaOt?J11PMsqE%tMQlSFY>!T(kFr!<^!ExR7L?FThD7!dyEIHODuv11ZZ{O(#X3;b z6|L{ml9kQA$&bjsgN4g^$*Da8Mu^CT%PepkkD8*uk8qFkJM+d*N-Z?Gb0y|U2>@r$ zu{hQDJz^ba?|9taT;FP2){r}cMo_nqk(k6YkDG`r8h16BHBy#1o&EhB zfnx(;M?IC8IeNYs{r3XboaI%0-g8@GRvYDp@4^Wduh zcgEafN53mCS!-g;LS^oc6_Km_23IbN{_M#a*&b<`A2-stqH*+SbXC3;+CTqoz}Z>- zNdGik^oy9d)vfK*ejPGD0a`x+1nzcFlmD2C1pHN>?Gk zK}+d%e<{?5X_>saiNI45)fMTeOM&=SoGEMGy>FlZAj6~>aTk)2K>E6$9{#p$)`%bk zaKz5e@EhQUw0cks%PJ(}I!pDC1$LY1E_|-m)ZPgUb{Rn4rH4;SZr(`OYJrQKB0M)y z45WowL*;f&C;YSX=?B2l5KGJhsryx>rtX{eT!6}fV%^_Fp>sWk=iZk+0Y#iEp<^`$ z)wb5p)BPC0p1eG9=%y$(#QUEVSGNg`hjCD`I+#A;7~IjjtKX^b>J;r*YJOYL4j004 zvR+}e^4W0qS4&3 z-25aHff6Z7ahCrnuPx|WybtfPyF--H17H`(1u3O}m5(*!N5qDmm51|{X4@423J`39 zghDdX(Q{)=2HPG0@Oveef6>!aA0=yZB0xqdGR$`@m-&8K+h@<0>}qNp}bDEI7tC^;V9@jC8qN4t`^=$deMKo-D^d zHW8__sdxOlW^5X8U*&`U@rr(@Ypu`AYm9{76(5BU=)bK#pL=;zIyd46Wews#eu}_B z=MiS3CfZ9B_bbT2DvWpf7GEnl9jSJ>hVs2ZF1V9{<#?G9OCWh0{DHk<4B@szfV(g> zJS}BU$-|t)AAM-InSYP6uD_?&RMIi>q-aYpnVE%@9u=x59njrs>$at5<)3;yTpi~? zq^0H2?wdrR@r+4~*y#5T2;5Q7b2w_VSA-b^B2yH1PY^6mIPxjG(Cn>USa}od5a6aJ zkRO3z4IAqH^e=u~#}fA?QlT7gS;PNZKl!7o7 zug%CF6j@`96>LciE4VFhDj`-VOv%OpbZ%%Inzo6_Q>}S?q4iT+%F(ZczWk7;$g#~B z+x&jNQ1)qxcAQYcHs^DbY$P+av+?1xdz2wZrV4R>8=*$`(}p;9)KA}6(u;`8%$FO>V%dEv#-{%karWh4R76RHqNx_ zkVT~udZ5hYw3*{9zz}x*s9U-v@L+U5!-#`QIg*4vB7AUqcWvt@Ya50%JgHJN;kgq$KpB-E51|_l3OLcZZh^LR5~gx_ z)K*E>Ib$Ub51>G{6~pNUbrwb`x&J?_h}LJ*-QwPsaA^#MM1f{>UCB~yLwQpQ&M7ve z&H@}5J{BmLJSm#$c{E%*m~GwJ|pWR@E78Si)G zkR$dsYUHf&Dt6RqG?`EDdht+L#(xH2A}|?_62nLqMnOk65yJ;|UKLiVX|z@68K?V{k@i>iwPc;RJ#_*%-N;j}9$0U!Xm0%apD7&9$_$Z<_ADaNw8 z3_Mibt~FH4`O3oh66AtPOUZ#@rZLpxEZOb=;k})ZA-A>fdTup3H%4q7U^^^Ag0Yb+ ztp2+iw%ox{7AgVq%Di@$GR-Y0&Fv3k5jN^o)s2xpG^MK4TX>ZK0{g-scqh~rPHXaA1=<8HBbzgfh?3VyhuBfX`|ulvT~H2(~L)j{RMVA8XJ8rN4eVfdyt(k%q4&_YY$eFo`586`=S}=k(rfnBSa~!pB2E#D%+19GK|lBx>(T?_p?tVf zMeBS1n$b^yL%qK%FXmQZn}gqp)IXZuCLQ^v_Jyw_?I)n#R&{17{gB_gCzdjd%vBx` zz;{Xe9=*c*E~OamHXU5~kM$`IOD$hj)r!NlM*sp3g4|b_A zn<(qG09dcXLXeMuWciOO%Amob-UCGpH_~y*FAQKSdofFTY5Mf}&9H}*EEuoG=@BE% znKQv^{0WfGYws`=TB2kT%IeUZV#^C^3yz{^-Lfbyv(3KAxb*r^8ZM4ey)AbBOC@Xv zCTWf?TgN!S7Tdeq$^cda*}QkezCr$4b=QB&vzS)hsrjGB7rKkTbE&B#HOK!;zn zsPI+oDjc{}54+ZT{@E2b*g3RZ4s{Zq$Ew-dS7>nDHZmhL;ABPBUPD@RWr5>W z^-?%}X-8T_y{&(arzaUz%k@5O+Ixju7F3QmA}#ZSnUBSfgRVGPmy+KUv$_7YMEoy~XK7WLHyVhT4FYbdDkaZw9Ub({;#65$|k!cuIh&pm-P2HaRA}x_w z?Y>mMu>(q*BrHw37S!{O3LXhxvCJGk@u~)GC~MgDYf0u#Im;zx%*q=0D?Mg(v8D1t zi&R=A$YXP&3qC1-m^u95NXqjcAvw9)bQ7YhX1J*C`Kdct-<#7Q&0k0sElV7gi zS!O>iy~q-$LD}bb-L5*unmgV85Tsx~o?<$N=g^IOyMbVj}-as^JOz z*(BP(7om;NsFK?P(!#M%oh6 zkwd`LA~0Z70;Pfc=5K{TO}IuE2Q`W!r8$}ZkFr4BOZ^*{GDf2T7k7=ckJ}IEml^i; zOR7ic#naTFRK@DO)!sqd z6`|UG1=#P7TX&uFpkWlo1|-3n6>Od>5Rc*{8MBd7t~@}v6BK0(Ejdoe{a zo%w}^HP1Tg#r%yE;&=A+#NqP2Xs6h1WW=`g-1CkE$mXt5#9w>mhx!IbjbdEIm`bY= z2ZLt~?)~>U7cT9hXbfnnm>A4C3kh;yv+Z%Q83J0kT?NyEIdkOt6Nz+4cEH$cskV6= z;A|9j>0}z1nJr-iGfj>(LF^39@;Q}t5?UT}kC`1Cr>7hVu$Avod1BV5_(ZO+MhBL5 z=Lls>+aY*XbT!Nidz`EVkh}WQ4iAz57xjXS872#4ccc%Qts1eZEOJee8tDfk*T-p~ z9kC-8W7WpY-t91VRjJeq@wETE1Wu9ZR~Z#9s3~|W�$dl3gH)Q&OCfV6T};Oqr8= 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 J%do#+{vV8|Vut_# literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/blank.png b/luci-theme-argon/htdocs/luci-static/argon/img/blank.png new file mode 100755 index 0000000000000000000000000000000000000000..9f4100e6e2ea2fa08912439eb7425af3f048eedd GIT binary patch literal 938 zcmaJ=L66cv6t0pOLtGQRxu;1t8cn3rmX@UxDuEV+#1g`iEC&ykc7V#ZQ`^B74o1E0 z!9@RtCjJ4Vo;`W;;-Byjn5vqfmTeG-$ z^$PpHk-vXt%Pra((IYaUi5+3C;gT^1UEiMK0k+-cvv0V@afLhHa70JeBjgZYurrL1 z`XOU;T&;m#;qnwG=S{ zA5$Bo{z(v{ROi>ah{f44|Y zg;KdBRgfYgSq7VrXW1fmf(B-LlZ)+ienx4CAWV`(NXi0_9I4~G;sIW3tW=K z_tqTCLfs&ycHrQysq;)l@H`ilE0WPRn-#+l6-jC}G^uPDimIwwvsqP|M$R>fv+!|1 zbFO>AJ>1F7#=#F+W)nx=bL_Sw;)8YB$lL8j*{QeTy1TuoJGqdVf!XE$b=mn5o1iS* zjxO75haU%Q;v+WNFFxG9&Ys17*K7>apX1+WXZ3>g^7K_leE${|FI~RI{kU1U@$}2P Q$Jy)YwtD8r=9AZd04Jv&d;kCd literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/volume_high.svg b/luci-theme-argon/htdocs/luci-static/argon/img/volume_high.svg new file mode 100755 index 000000000..f01ad5c79 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/img/volume_high.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/volume_off.svg b/luci-theme-argon/htdocs/luci-static/argon/img/volume_off.svg new file mode 100755 index 000000000..0598d584e --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/img/volume_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/js/jquery.min.js b/luci-theme-argon/htdocs/luci-static/argon/js/jquery.min.js new file mode 100755 index 000000000..b0614034a --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="

+ +